簡體   English   中英

SQL Case語句不適用於“ Else”

[英]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 然后,如果需要返回TF或基於返回值的任意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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM