꽤 많은 조건에 따라 반환되는 열 중 몇 개를 계산해야 하는 SQL 쿼리를 작성하고 있습니다.
현재 중첩된 케이스 문을 사용하고 있지만 점점 지저분해지고 있습니다. 더 나은(더 체계적이고 가독성이 높은) 방법이 있나요?
(Microsoft SQL Server, 2005 사용 중)
단순화된 예제입니다:
SELECT
col1,
col2,
col3,
CASE
WHEN condition
THEN
CASE
WHEN condition1
THEN
CASE
WHEN condition2
THEN calculation1
ELSE calculation2
END
ELSE
CASE
WHEN condition2
THEN calculation3
ELSE calculation4
END
END
ELSE
CASE
WHEN condition1
THEN
CASE
WHEN condition2
THEN calculation5
ELSE calculation6
END
ELSE
CASE
WHEN condition2
THEN calculation7
ELSE calculation8
END
END
END AS 'calculatedcol1',
col4,
col5 -- etc
FROM table
랩 모든 경우에도 하나의.
SELECT
col1,
col2,
col3,
CASE
WHEN condition1 THEN calculation1
WHEN condition2 THEN calculation2
WHEN condition3 THEN calculation3
WHEN condition4 THEN calculation4
WHEN condition5 THEN calculation5
ELSE NULL
END AS 'calculatedcol1',
col4,
col5 -- etc
FROM table
저는 개인적으로 이런 식으로 임베드된 CASE 표현식을 제한하여 사용합니다. 또한 무슨 일이 일어나고 있는지 설명하기 위해 주석을 넣습니다. 너무 복잡하다면 함수로 분리합니다.
SELECT
col1,
col2,
col3,
CASE WHEN condition THEN
CASE WHEN condition1 THEN
CASE WHEN condition2 THEN calculation1
ELSE calculation2 END
ELSE
CASE WHEN condition2 THEN calculation3
ELSE calculation4 END
END
ELSE CASE WHEN condition1 THEN
CASE WHEN condition2 THEN calculation5
ELSE calculation6 END
ELSE CASE WHEN condition2 THEN calculation7
ELSE calculation8 END
END AS 'calculatedcol1',
col4,
col5 -- etc
FROM table
select datediff(dd,Invdate,'2009/01/31')+1 as DaysOld,
case when datediff(dd,Invdate,'2009/01/31')+1 >150 then 6 else
case when datediff(dd,Invdate,'2009/01/31')+1 >120 then 5 else
case when datediff(dd,Invdate,'2009/01/31')+1 >90 then 4 else
case when datediff(dd,Invdate,'2009/01/31')+1 >60 then 3 else
case when datediff(dd,Invdate,'2009/01/31')+1 >30 then 2 else
case when datediff(dd,Invdate,'2009/01/31')+1 >30 then 1 end
end
end
end
end
end as Bucket
from rm20090131atb
그냥 모든 사건에 대한 최종 기술서임을 기술서임을 있어야 합니다
그러나 이 모든 답을 찾을 수 있고, 내가 겪은 이야기를 하는 슈퍼 준활성 추가합니까 오토메이티드 @deejers 주어진다.
SELECT
col1,
col2,
col3,
CASE
WHEN condition1 THEN calculation1
WHEN condition2 THEN calculation2
WHEN condition3 THEN calculation3
WHEN condition4 THEN calculation4
WHEN condition5 THEN calculation5
END AS 'calculatedcol1',
col4,
col5 -- etc
FROM table
다른 만들 수 있다는 것은 아주 도움됐네 선택적입니다 옵션임 등 대부분의 시나리오에서와.
이 예에서는 이 그림은 SQL 경우 어떻게 도움이 기술서임을 보일 경우 및 하나 이상의 경우 경우 내부 루프