2017-04-10 59 views
0

我試圖將值設置爲零,如果用戶不存在於我的一個表中。目前,我正在使用解碼來計算符合特定條件的用戶數量,然後顯示結果。顯示默認值解碼Oracle SQL

SELECT T.D_CODE, 
     T.C_NO, 
     SUM(DECODE(t.Value, 'A', 1, 0)) AS FirstValue, 
     SUM(DECODE(t.Value, 'B', 1, 0)) AS SecondValue, 
     SUM(DECODE(t.Value, 'C', 1, 0)) AS ThirdValue, 
     SUM(DECODE(t.Value, 'F', 1, 0)) AS LastValue 
    FROM Table T, 
     Table OtherTable S 
WHERE T.T_SSN = S.SSN(+) 
    AND T.D_CODE = 'INF' 
GROUP BY t.D_CODE, 
      T.C_NO; 

問題是我有一個third table (TT)它有其他值。如果TT的值不存在於Table T中,那麼我需要爲所有Decode值顯示該記錄,其值爲0。

需要的輸出看起來是這樣的:

D_CODE, C_NO, FirstValue, SecondValue, ThirdValue, LastValue INF 600 2 0 0 0 INF 501 0 0 1 0 INF 400 0 0 0 0

哪裏INF 400不表T存在,只有在表TT

有什麼建議?

+0

示例數據和必需的輸出肯定會有所幫助 –

+0

@JorgeCampos肯定,發佈要求的輸出 – rvisio

+0

我想我明白了,但我不完全確定,所以我會給你一個答案,如果它不是你想要的你在評論中告訴我。另外,如果不是,你將不得不從三個表中添加一些符合你想要的輸出的樣本數據。 –

回答

0

您的問題是您正在篩選用戶T.D_CODE = 'INF',這意味着任何不符合該條件的用戶都不會在結果中出現。所以,我的理解你的問題,你需要這樣的:

SELECT T.D_CODE, 
     T.C_NO, 
     SUM(CASE WHEN T.D_CODE = 'INF' AND t.Value = 'A' THEN 1 ELSE 0 END) AS FirstValue, 
     SUM(CASE WHEN T.D_CODE = 'INF' AND t.Value = 'B' THEN 1 ELSE 0 END) AS AS SecondValue, 
     SUM(CASE WHEN T.D_CODE = 'INF' AND t.Value = 'C' THEN 1 ELSE 0 END) AS AS ThirdValue, 
     SUM(CASE WHEN T.D_CODE = 'INF' AND t.Value = 'D' THEN 1 ELSE 0 END) AS AS LastValue 
    FROM Table T 
     LEFT JOIN Table OtherTable S 
      ON T.T_SSN = S.SSN 
     LEFT JOIN AnotherTable TT 
       ON T.T_SSN = TT.SSN 
GROUP BY t.D_CODE, 
      T.C_NO; 

既然你沒有提供有關TT表中的任何更多的細節我只是猜測它和T表之間的關係。

備註:始終使用SQL ANSI [LEFT] JOIN樣式。

ALSO請注意,您目前的查詢和取現字段的表STT是完全不相干的,除非你沒有解釋是正確的。