[英]SQL Case Statement not working with 'Else'
以下Case語句無法正常工作-將所有結果都生成為“ i”(語句的“ Else”部分)。 如果我注釋掉其他部分,則代碼可以正常工作,並在不符合條件的地方產生NULL。 任何想法為什么會這樣? 不支持ELSE嗎? 我確定我已經在Case語句中使用了Else(但從未與And一起使用 )?
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
正如GSerg所說,您要求的是錯誤的事情。 您可能想使用如下查詢:
Fire_Safety =MAX(CASE
WHEN Course = 'Fire Safety'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN Course_Start_Date
ELSE null
END)
這將為您提供消防安全課程的最近日期,如果沒有滿足該條件的日期,則為null
。 然后,如果需要返回T
或F
或基於返回值的任意max
則可以在max
附近有另一種case
。 是否可以,這兩種情況下您都不清楚要發生什么:)
我認為您想將分配分配給聚合之外的I和F。 這是一種方法:
SELECT EN,
(First_Name + ' ' + Last_Name) as Name,
(CASE WHEN SUM(CASE WHEN Course = 'First Aid' and Status = 'Finished' and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 1 ELSE 0 END) > 0
THEN 'F' ELSE 'I'
END) as First_Aid,
(CASE WHEN SUM(CASE WHEN course = 'Manual Handling' and Status = 'Finished' and Course_Start_Date > DATEADD(day, -1095, GETDATE()) > 0
THEN 1 ELSE 0 END) > 0
THEN 'F' ELSE 'I'
END) as Manual_Handling,
(CASE WHEN SUM(CASE WHEN Course = 'Fire Safety' and Status = 'Finished' and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 1 ELSE 0 END) > 0
THEN 'F'
ELSE 'i'
END) as Fire_Safety
into MyTraining
FROM Learning_History
Group By EN, First_Name, Last_Name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.