2016-08-24 69 views
2

因此,我必須在DB2中編寫一個SQL,並且我無法弄清楚如何執行該操作。 喜歡的東西挑這些域代碼和它們的值從財務表 只要他們是高於$ 10,000個從同一個表中選擇多個(帶空值)

Select 
(A.Value), 
(B.Value), 
(C.Value) 

... 

From 
Client K, 
Finance A, 
Finance B, 
Finance C 
... 

的問題是在哪裏聲明。我不能忍受:

Where 
K.Client = A.Client 
AND A.FieldCode = 1 
AND A.Value > 10000 
AND K.Client = B.Client 
AND B.FieldCode = 2 
AND B.Value > 10000 
... 

等等......因爲這並不包括空值,所以它大大降低了結果集,更多的時候,我叫財務表。

如何保持上述格式並使其包含空值,以便只要財務A或財務B或財務C等存在就會顯示該行? (注意:做第一個最明顯的事情就像重複調用財務表一次,比如說財務A,但沒有B,C,D等不能解決這個問題,因爲結果(來自A,B,C, D等)不能在許多行上分開)。

這是我做的一個壓縮版本:

SELECT 
    A.CLIENT_ID, 
    A.PERIOD_ID, 
    FN0.AMOUNT, 
    FN2.AMOUNT 
FROM ASSESMENT A 
LEFT OUTER JOIN FINANCE FN0 
    ON A.CLIENT_ID = FN0.CLIENT_ID 
    AND A.PERIOD_ID = FN0.PERIOD_ID 
LEFT OUTER JOIN FINANCE FN1 
    ON A.CLIENT_ID = FN1.CLIENT_ID 
    AND A.PERIOD_ID = FN1.PERIOD_ID 
WHERE 
    FN0.FLD_CD = 1258860 
AND FN1.FLD_CD = 1258861 

林仍然是,如果我空出的FN1相關的線,我得到了很多的返回值的問題。 AKA它仍然不包含NULL值,並且只有在所有字段代碼都有值時才返回值。

回答

3

你需要Left Outer Join,而不是逗號分隔INNER Join

SELECT A.Value, 
     B.Value, 
     C.Value 
FROM Client K 
     LEFT JOIN Finance A 
       ON K.Client = A.Client 
       AND A.Value > 10000 
       AND A.FieldCode = 1 
     LEFT JOIN Finance B 
       ON K.Client = B.Client 
       AND B.Value > 10000 
       AND B.FieldCode = 2 
     LEFT JOIN Finance C 
       ON K.Client = c.Client 
       ...... 

更新:

移動左表過濾器ON條件否則將被隱式轉換爲INNER JOIN。像這樣嘗試

SELECT A.client_id, 
     A.period_id, 
     FN0.amount, 
     fn2.amount 
FROM assesment A 
     LEFT OUTER JOIN finance FN0 
        ON A.client_id = FN0.client_id 
         AND A.period_id = FN0.period_id 
         AND FN0.fld_cd = 1258860 
     LEFT OUTER JOIN finance FN1 
        ON A.client_id = FN1.client_id 
         AND A.period_id = FN1.period_id 
         AND FN1.fld_cd = 1258861 
+0

感謝您的回覆。我不知道它的工作原理。但首先:我不能添加行AND A.FieldCode = 1到from語句,它說無效的ON語句。任何想法爲什麼?目前,我把A.FieldCode行放在了它的工作地點......但是我想這可以避免練習的全部重點? – Ardia

+0

@Ardia *我無法添加行AND A.FieldCode = 1 *顯示您添加的完整代碼AND AND.FieldCode = 1' –

+0

更新了主要問題中的代碼。仍然沒有擺脫空? – Ardia