다음 case 문은 올바르게 작동하지 않습니다. 모든 결과를 'i'(문에서 'Else'부분)로 생성합니다. 부분을 주석 처리하면 코드가 정상적으로 작동하여 기준이 충족되지 않는 경우 NULL이 생성됩니다. 왜 그런지 알고 싶습니다. ELSE는 지원되지 않습니까? 나는 Else가 Case 문에서 사용한 것을 본 적이있을 것이라고 확신합니다 (단 및).SQL Case 문이 'Else'와 함께 작동하지 않습니다.
SELECT
EN,
(First_Name + ' ' + Last_Name) as Name,
First_Aid =MAX(CASE
WHEN Course = 'First Aid'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 'F'
ELSE 'i'
END),
Manual_Handling =MAX(CASE
WHEN Course = 'Manual Handling'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 'F'
ELSE 'i'
END),
Fire_Safety =MAX(CASE
WHEN Course = 'Fire Safety'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 'F'
ELSE 'i'
END)
into MyTraining
FROM Learning_History
Group By EN,First_Name, Last_Name
당신이 가지고있는 것은 본질적으로'MAX '('F ','i ')'입니다. 적어도 하나의 레코드가 기준과 일치하지 않으면 결과가 "i"입니다. 어떤 경우에도이'case'는'null'을 줄 것입니다 - 왜 그것을 기대합니까? – GSerg
그리고 물론, 'else'가 없을 때 "작동"하는 이유는'max ('F', null)'이''F ''를 반환하기 때문입니다. 그것은 'else'의 잘못이 아니라 단지 로직의 작은 경과입니다. – Luaan
그런 빠른 응답에 감사드립니다. 초급자로서 나는 나이를 먹으면 서 자신의 능력을 과다하게 생각하고 대답을 이해하지 못한다. 나쁘다. @ 루안 - 당신의 제안은 나에게 'F'를 얻는 코스 날짜가 있다는 것을 제외하고는 Else가 주석 처리 한 코드와 동일한 결과를 제공합니다. 어쩌면이 링크는 내가 더 잘 이루고자하는 것을 보여줄 수 있습니까? –
ttratl