나는 다르게 읽기 쉽게 만들기 위해이 포맷했습니다. CASE 문의 논리는 CASE WHEN ... THEN ... ELSE ... END 여야합니다. WHEN 문에 AND 절을 넣을 수는 있지만 사용자가 THEN 절에서 AND를 사용할 수 있다는 것을 알지 못합니다.
WHEN 문은 boolian 값을 생성하지 않으며 'WHEN x = y THEN'에는 'WHEN x THEN'이 없습니다.
진술 시작 부분에 CASE와 WHEN 사이에 아무 것도 입력하지 않아야합니다. 이는 결코 작동하지 않습니다.
테이블 별칭을 사용하기 시작하면 코드를 훨씬 쉽게 읽을 수 있습니다.
AND CASE DO11_DOCUM_MG36
WHEN 'TSC-ORDINE-RIC'
THEN (
CONVERT(DATE, ISNULL(dbo.DO31_DOCCORPOORD.DO31_DATACONS, DATEADD(day, ISNULL(dbo.DO17_DOCTESTAPERS.DO17_NUMPERS4, 15), dbo.DO12_DOCTESTARIF.DO12_DATAVSCONF)), 102) <= '2016-02-29'
AND dbo.DO12_DOCTESTARIF.DO12_DATAVSCONF IS NOT NULL
)
AND (
dbo.DO36_DOCCORPOEST.DO36_DATAST1 IS NULL
OR CONVERT(DATE, dbo.DO36_DOCCORPOEST.DO36_DATAST1, 102) >= '2016-02-01'
)
ELSE (
CONVERT(DATE, ISNULL(dbo.DO31_DOCCORPOORD.DO31_DATACONS, DATEADD(day, ISNULL(dbo.DO17_DOCTESTAPERS.DO17_NUMPERS4, 15), dbo.DO12_DOCTESTARIF.DO12_DATAVSCONF)), 102) BETWEEN '2016-02-01'
AND '2016-02-29'
AND dbo.DO12_DOCTESTARIF.DO12_DATAVSCONF IS NOT NULL
)
END
CASE 문 논리는 다음과 같이 읽어야합니다.
CASE
WHEN a.Field1 = 'SomeText'
THEN CONVERT(DATE, a.DateTimeField)
WHEN a.Field1 = 'DifferentText' AND a.Field2 = 'YetMoreText'
THEN CONVERT(DATE, a.DifferentDateTimeField)
ELSE 'DoSomethingElse'
END
일부 추가 읽기;
http://www.techonthenet.com/sql_server/functions/case.php
논리 읽기, 나는이 당신을 할 것 같은 당신이 전혀 여기에 뭔가를 case 문을 필요로 확신하고 있지 않다;
AND
(
CONVERT(DATE, ISNULL(dbo.DO31_DOCCORPOORD.DO31_DATACONS, DATEADD(day, ISNULL(dbo.DO17_DOCTESTAPERS.DO17_NUMPERS4, 15), dbo.DO12_DOCTESTARIF.DO12_DATAVSCONF)), 102) <= '2016-02-29'
AND dbo.DO12_DOCTESTARIF.DO12_DATAVSCONF IS NOT NULL
)
AND
(
(
dbo.DO36_DOCCORPOEST.DO36_DATAST1 IS NULL
OR CONVERT(DATE, dbo.DO36_DOCCORPOEST.DO36_DATAST1, 102) >= '2016-02-01'
)
OR
CONVERT(DATE, ISNULL(dbo.DO31_DOCCORPOORD.DO31_DATACONS, DATEADD(day, ISNULL(dbo.DO17_DOCTESTAPERS.DO17_NUMPERS4, 15), dbo.DO12_DOCTESTARIF.DO12_DATAVSCONF)), 102) BETWEEN '2016-02-01'AND '2016-02-29'
)
귀하의 의견에 따르면, 이것을 사용할 수 있습니다.
AND (
( OrderType = 'TSC-ORDINI-RIC'
AND
'WHERE CONDITION 1 GOES HERE'
)
OR
( OrderType = 'TSC-ORDINI'
AND
'WHERE CONDITION 2 GOES HERE'
)
)
무엇이 문제입니까? – MusicLovingIndianGirl
DO31_DATACONS 또는 DO17_NUMPERS4에 무엇이 있습니까? – LukStorms
Sintax가 '<'근처에서 올바르지 않다고 말합니다. – user3348353