반응형
SQL에서 if-then-else 생식을입니까? [복제]
이 질문에 이미 답변이 있습니다.
다음과 같은 우선 순위에 따라 테이블에서 데이터를 선택해야합니다.
select product, price from table1 where project = 1
-- pseudo: if no price found, do this:
select product, price from table1 where customer = 2
-- pseudo: if still no price found, do this:
select product, price from table1 where company = 3
즉, 가격이를 기준으로 한 제품 3 개를 찾았다면 project = X
을 선택하고 싶지 않습니다 customer = Y
. 결과 3 행을 반환하고 완료하고 싶습니다.
SQL에서 이와 같은 작업을 어떻게해야합니까? 의사에 대해 어떤 종류의 케이스를 사용합니까? 노조 나 다른 똑똑한 일을 나?
편집 : MS SQL을 사용하고 있습니다.
감사합니다!
다음 SQL 쿼리를 만들 수 있습니다.
IF ((SELECT COUNT(*) FROM table1 WHERE project = 1) > 0)
SELECT product, price FROM table1 WHERE project = 1
ELSE IF ((SELECT COUNT(*) FROM table1 WHERE project = 2) > 0)
SELECT product, price FROM table1 WHERE project = 2
ELSE IF ((SELECT COUNT(*) FROM table1 WHERE project = 3) > 0)
SELECT product, price FROM table1 WHERE project = 3
CASE 문은 SQL의 IF 문에 가장 가깝고 모든 버전의 SQL Server에서 지원됩니다.
SELECT CASE <variable>
WHEN <value> THEN <returnvalue>
WHEN <othervalue> THEN <returnthis>
ELSE <returndefaultcase>
END
FROM <table>
대신에 사용 EXISTS
하고 COUNT
바로 사용하십시오 @@ROWCOUNT
:
select product, price from table1 where project = 1
IF @@ROWCOUNT = 0
BEGIN
select product, price from table1 where customer = 2
IF @@ROWCOUNT = 0
select product, price from table1 where company = 3
END
SQL 서버를 사용하면 IF / THEN 논리 대신 CTE를 사용하여 기존 쿼리에서 쉽게 매핑하고 관련 쿼리 수를 설명 수 있습니다.
WITH cte AS (
SELECT product,price,1 a FROM table1 WHERE project=1 UNION ALL
SELECT product,price,2 a FROM table1 WHERE customer=2 UNION ALL
SELECT product,price,3 a FROM table1 WHERE company=3
)
SELECT TOP 1 WITH TIES product,price FROM cte ORDER BY a;
또는 SELECT
최적화 프로그램을 단순화하기 위해 모든 것을 하나로 결합 할 수 있습니다 .
SELECT TOP 1 WITH TIES product,price FROM table1
WHERE project=1 OR customer=2 OR company=3
ORDER BY CASE WHEN project=1 THEN 1
WHEN customer=2 THEN 2
WHEN company=3 THEN 3 END;
이것이 도움이 검증하십시오.
select TOP 1
product,
price
from
table1
where
(project=1 OR Customer=2 OR company=3) AND
price IS NOT NULL
ORDER BY company
케이스가 말하는 것 같다는 것입니다.
select
product
,coalesce(t4.price,t2.price, t3.price) as price
from table1 t1
left join table1 t2 on t1.product = t2.product and t2.customer =2
left join table1 t3 on t1.product = t3.product and t3.company =3
left join table1 t4 on t1.product = t4.product and t4.project =1
-대부분 위와 대답. 테스트에 포함 된 코드
DROP TABLE table1
GO
CREATE TABLE table1 (project int, customer int, company int, product int, price money)
GO
INSERT INTO table1 VALUES (1,0,50, 100, 40),(1,0,20, 200, 55),(1,10,30,300, 75),(2,10,30,300, 75)
GO
SELECT TOP 1 WITH TIES product
, price
, CASE WhereFound WHEN 1 THEN 'Project'
WHEN 2 THEN 'Customer'
WHEN 3 THEN 'Company'
ELSE 'No Match'
END AS Source
FROM
(
SELECT product, price, 1 as WhereFound FROM table1 where project = 11
UNION ALL
SELECT product, price, 2 FROM table1 where customer = 0
UNION ALL
SELECT product, price, 3 FROM table1 where company = 30
) AS tbl
ORDER BY WhereFound ASC
참고 URL : https://stackoverflow.com/questions/15085990/can-you-have-if-then-else-logic-in-sql
반응형
'IT' 카테고리의 다른 글
Django에서 redis를 어떻게 사용할 수 있습니까? (0) | 2020.09.01 |
---|---|
Go에서 부분 부분 추출 (0) | 2020.09.01 |
android-23으로 대상을 찾을 수 있습니다. (0) | 2020.09.01 |
.NET (야수)에 대한 또는 반대 사례 [종료 됨] (0) | 2020.09.01 |
TortoiseGit을 선택 체리 선택 (0) | 2020.09.01 |