2016-02-05 143 views
0

我遇到了一個我正在寫的查詢語句的問題 - 我創建了一個指示符字段,如果滿足幾個例子,我只想顯示爲'1'。該字段是使用MAX()函數中的case語句構建的 - 我需要該函數,因爲這部分是CTE的一部分,與另一個將行轉換爲列的CTE結合,並使用函數進行橫向化。在函數中使用Case語句

MAX(CASE 
    WHEN PMOD1_PGM IN ('IR') AND INTEGER(PMOD1_PCT) <> 0 
     THEN 1 
    WHEN PMOD2_PGM IN ('IR') AND INTEGER(PMOD2_PCT) <> 0 
     THEN 1 
    WHEN PMOD3_PGM IN ('IR') AND INTEGER(PMOD3_PCT) <> 0 
     THEN 1 
    WHEN PMOD4_PGM IN ('IR') AND INTEGER(PMOD4_PCT) <> 0 
     THEN 1 
    WHEN PMOD5_PGM IN ('IR') AND INTEGER(PMOD5_PCT) <> 0 
     THEN 1 
    WHEN PMOD6_PGM IN ('IR') AND INTEGER(PMOD6_PCT) <> 0 
     THEN 1 
    ELSE 0 END) AS @IRPM_IND, 
     /*@IRPM_PCT*/ 
MAX(CASE 
    WHEN PMOD1_PGM IN ('IR') AND PMOD1_CD IN ('C') 
     THEN PMOD1_PCT * - 1 
    WHEN PMOD1_PGM IN ('IR') AND PMOD1_CD IN ('D') 
     THEN PMOD1_PCT 
    WHEN PMOD2_PGM IN ('IR') AND PMOD1_CD IN ('C') 
     THEN PMOD2_PCT * - 1 
    WHEN PMOD2_PGM IN ('IR') AND PMOD1_CD IN ('D') 
     THEN PMOD2_PCT 
    WHEN PMOD3_PGM IN ('IR') AND PMOD1_CD IN ('C') 
     THEN PMOD3_PCT * - 1 
    WHEN PMOD3_PGM IN ('IR') AND PMOD1_CD IN ('D') 
     THEN PMOD3_PCT 
    WHEN PMOD4_PGM IN ('IR') AND PMOD1_CD IN ('C') 
     THEN PMOD4_PCT * - 1 
    WHEN PMOD4_PGM IN ('IR') AND PMOD1_CD IN ('D') 
     THEN PMOD4_PCT 
    WHEN PMOD5_PGM IN ('IR') AND PMOD1_CD IN ('C') 
     THEN PMOD5_PCT * - 1 
    WHEN PMOD5_PGM IN ('IR') AND PMOD1_CD IN ('D') 
     THEN PMOD5_PCT 
    WHEN PMOD6_PGM IN ('IR') AND PMOD1_CD IN ('C') 
     THEN PMOD6_PCT * - 1 
    WHEN PMOD6_PGM IN ('IR') AND PMOD1_CD IN ('C') 
     THEN PMOD6_PCT 
    ELSE 0 END) AS @IRPM_PCT 

基本上我檢查一個字段,看是否「IR」是否存在以及它的百分比不等於0〜如果,所以我想爲1的指標,但,當我運行此,仍然有一些條目指標爲1,@IRPM_PCT爲0.任何建議?它是否與MAX()函數中的case語句有關?當我檢查通過的數據時,它似乎「工作」,但我想消除這些指標中的1個,0個百分比,我認爲我構建指標案例陳述的方式將處理此問題。

+2

請用你正在使用的數據庫標記你的問題。 –

+0

你能分享一些樣本數據,你試圖得到的結果以及你實際得到的結果嗎? – Mureinik

+0

很抱歉,DB2添加了。 – user5888721

回答

1

在IRPM_PCT CASE語句中,您檢查'C'的PMOD6_PGM兩次(而不是'C',然後是'D')。

所以,如果PMOD6_PGM = 'IR',PMOD6_PCT是非零和PMOD1_CD = 'd', 那麼你會得到IRPM_IND = 1和IRPM_PCT = 0(因爲PMOD1_CD IN ('D')不在IRPM_PCT CASE語句)。

所以只要將您最後的PMOD1_CD IN ('C')更改爲PMOD1_CD IN ('D')即可。

+0

此外,您所有的PMOD#_CD檢查都是針對PMOD1_CD的。這是應該的方式嗎?或者他們應該是PMOD1_CD,PMOD2_CD,PMOD3_CD等? – Eric