2017-06-20 180 views
0

我想知道我有什麼可以用它來能夠做到:情況下,當在SAP HANA報表

如果條件1爲true,則僅顯示條件1,否則值去 條件2和顯示唯一的條件2值。

我試圖使用的情況下,但這似乎是執行兩個WHEN語句(這是因爲兩個案件存在於表中,但我只想第一次時,如果兩者都是真的返回)。有沒有辦法做到這一點?

SELECT 
RI.*, 
CASE 
WHEN 
    ("applianceId" 
    in 
    ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') 
    and "type" in ('peer')) 
THEN 'Measured' 
ELSE 
    ("applianceId" 
    NOT in 
    ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') 
    and "type" IN('peer')) 
THEN 'RELEVANCE' 
ELSE 'ERROR' 
END AS "Select" FROM "SP_CUSTOMER"."RU_INSIGHT" RI 
where RI."userId" in 
('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6') 
and "type" in ('peer') 

current output that i am getting

desired output

+0

這裏有點難理解要求。你能分享一些樣本數據和你試圖獲得的結果嗎? – Mureinik

+1

嗨所以基本上我想要做的是如果第一種情況下滿意時只返回那一行如果第一種情況下不滿意時才返回第二種情況時 – DazM

+1

不好的語法? '當......時......然後......當......然後......其他......結束時......「的情況。當我想時,你的第一個應該是一個。但也被視爲別名'as「SELECT ....」'這看起來很奇怪......選擇statemetn作爲別名...奇怪。 https://blogs.sap.com/2013/10/05/useful-sql-with-sap-hana/會顯示多個時間,其他時候顯示多於2個評估。 – xQbert

回答

1

試試這個: -

SELECT RI.*, 
    CASE WHEN ("applianceId" in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') and "type" in ('peer')) THEN 'Measured' 
    WHEN ("applianceId" NOT in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') and "type" IN('peer')) THEN 'RELEVANCE' 
    ELSE 'ERROR' END AS "Select" FROM "SP_CUSTOMER"."RU_INSIGHT" RI 
    where RI."userId" in ('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6') and "type" in ('peer'); 
+0

嗨@s_sauden感謝您的回覆,但您的答案似乎已丟失。代碼與我的相同 – DazM

+0

hi @DazM ...是的,你和我的代碼相同,但不完全一樣。我使用時而不是其他。你在代碼中使用了兩次其他條件,我認爲它沒有意義。 –

+0

這似乎並沒有限制在預期結果圖像中所需的「測量」記錄。 – xQbert

1

檢查:

SELECT 
RI.*, 
CASE 
WHEN 
    ("applianceId" 
    in 
    ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') 
    and "type" in ('peer')) 
THEN 'Measured' 
WHEN 
    ("applianceId" 
    NOT in 
    ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') 
    and "type" IN('peer')) 
THEN 'RELEVANCE' 
ELSE 'ERROR' 
END AS "Select" FROM "SP_CUSTOMER"."RU_INSIGHT" RI 
where RI."userId" in 
('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6') 
and "type" in ('peer') 
+0

嗨@irfan感謝您的回覆,但您的答案似乎缺失。代碼和我的一樣 – DazM

0
SELECT 
    RI.*, 
    CASE WHEN ("applianceId" in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') and "type" in ('peer')) 
    THEN 'Measured' 
    WHEN ("applianceId" NOT in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') and "type" IN('peer')) 
    THEN 'RELEVANCE' 
    ELSE 'ERROR' 
    END AS "Select" FROM "SP_CUSTOMER"."RU_INSIGHT" RI 
    where RI."userId" in 
    ('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6') 
    and "type" in ('peer') 

我的文章與其他文章相同,您沒有觀察CASE,在第二種情況下,ELSE之後的CASE是錯誤。在ELSE結束END語句後,您不應該立即使用CASE,並使用CASE開始第二個條件或使用WHEN寫入條件。在你的情況下,後者是相關的。我希望你明白!

0

爲什麼你需要一個案例呢?

您沒有執行兩種情況,您的userID表中每個記錄最後有兩個applianceID。 select中的case語句不會限制返回的數據,它只是控制顯示記錄的可見內容。

您得到多個記錄的原因是因爲您的表中有多條記錄。這可以通過您在當前結果中具有單個用戶標識的多個記錄來證明。一個用於'AlwaysOn'的多個日期'總'。由於「總計」不在您的第一個列表中,所以「SELECT」值在第二條記錄上被設置爲「相關性」。

由於您的Ri.userID表有問題的ID不同applianceID的,也許還有其他值多次列出,並根據您的輸出我覺得你只是想......

SELECT RI.*, 'Measured' AS "Select" 
FROM "SP_CUSTOMER"."RU_INSIGHT" RI 
WHERE RI."userId" in 
('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6') 
    and "type" in ('peer') 
    and "applianceId" in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') 

我不同意命名一列「選擇」,因爲這是一個鍵/保留字。

我不明白你爲什麼需要case語句...因爲錯誤或'Relevance'不在你想要的輸出中。

and not in如果一個字段可以爲null是危險的。一個空值的not in將返回記錄,因爲當系統比較null(列表)時null不在列表中,因此它返回。空不能比較使用=不在,不存在。只有a不爲空或爲空。