2015-02-24 44 views
1

遇到CASE WHEN語句的問題。示例腳本如下:SQL - CASE當遇到問題時

SELECT 
    CASE WHEN Column1 = "Example 1" THEN "Name 1" 
     WHEN Column1 = "Example 2" THEN "Name 2" 
     WHEN Column1 = "Example 3" THEN "Name 3" 
     WHEN Column1 = "Example 3" AND Column2 IN ("Sample1", "Sample2") THEN "Name4" 
     WHEN Column1 = "Example 3" AND Column2 IN ("Sample3", "Sample4") THEN "Name5" 
     ELSE "-" END AS Name, 

    [aggregation language that doesn't affect the script] 

FROM Table1 
GROUP BY Name 
HAVING Name IN ("Name1", "Name2", "Name3", "Name4", "Name5" 
ORDER BY Name ASC 

我遇到的問題是執行腳本「名1」時,「名稱2」和「NAME3」所有拉力(和拉準確),但「NAME4」和「NAME5 「根本不會拉,大概是因爲他們與」Name3「(Column1 =」Example3「)共享一個條件。

本質上,我試圖拉動名爲「Name3」的聚合,它的組件是「Name4」和「Name5」。

想一想,其中一個方法是「Name3」是NFL,「Name4」和「Name5」分別是AFC和NFC。因爲我以條件{Column1 =「Example3」}拉入NFL,儘管有第二個必需的「AND」條件,但它不會拉入AFC和NFC。

如果有人可以在這裏幫助,會喜歡。我嘗試過使用括號,改變WHEN的順序......沒有運氣。

在此先感謝!

+0

您能否提供一個期望的結果集是什麼樣子的樣本? – 2015-02-24 18:39:27

回答

0

對於「名稱3」,你需要排除的「姓名4」的條件和「名稱5」:從第一個匹配條件

CASE WHEN Column1 = "Example 1" THEN "Name 1" 
    WHEN Column1 = "Example 2" THEN "Name 2" 
    WHEN Column1 = "Example 3" 
     AND Column2 NOT IN ("Sample1", "Sample2", "Sample3", "Sample4") THEN "Name 3" 
    WHEN Column1 = "Example 3" AND Column2 IN ("Sample1", "Sample2") THEN "Name4" 
    WHEN Column1 = "Example 3" AND Column2 IN ("Sample3", "Sample4") THEN "Name5" 
    ELSE "-" END AS Name, 

case when回報,然後忽略其餘部分,所以你需要使更早的條件變得更窄。或者,您可以在名稱3條件之前放置Name4/5條件。

4

我的建議是改變你的情況的順序:

SELECT 
    CASE WHEN Column1 = "Example 1" THEN "Name 1" 
     WHEN Column1 = "Example 2" THEN "Name 2" 
     WHEN Column1 = "Example 3" AND Column2 IN ("Sample1", "Sample2") THEN "Name4" 
     WHEN Column1 = "Example 3" AND Column2 IN ("Sample3", "Sample4") THEN "Name5" 
     WHEN Column1 = "Example 3" THEN "Name 3" 
     ELSE "-" END AS Name, 

    [aggregation language that doesn't affect the script] 

FROM Table1 
GROUP BY Name 
HAVING Name IN ("Name1", "Name2", "Name3", "Name4", "Name5" 
ORDER BY Name ASC 

以您目前的訂單,如果「NAME4」或「NAME5」是真的,「姓名3」將永遠是真實的,所以它將首先執行。通過修改排序,僅當「名稱4」和「名稱5」出現錯誤時,「名稱3」纔會成立。合理?

+0

@Cooper,我很想知道你是否能夠解決你的問題。 – 2015-02-26 12:55:39

1

如果有人能幫到這裏,會很樂意。我嘗試過使用括號,改變WHEN的順序......沒有運氣。

你不完全誠實,是嗎?

http://sqlfiddle.com/#!6/11381/3/0 - WHEN條件的簡單開關修復了您的小問題。這裏的教訓是,測試停止在第一個條件是真的。