2016-11-08 22 views
1

我正嘗試使用簡單的查詢爲我的報告輸出一些必要的行以提取。這是查詢: -當我在Oracle中使用CASE WHEN表達式時發生額外的空行

SELECT DISTINCT Z.ITEMDESC, X.NMCODDES AS CODE 

FROM NMCODMAS X, NMITEMAS Y, NMSALREC Z 

WHERE 
     X.NMHRDCDE='PKZ' 
     AND Y.FINISHGD='Y' 
     AND X.COMPCODE=Z.COMPCODE 
     AND Y.COMPCODE=Z.COMPCODE 
     AND X.COMPCODE=Y.COMPCODE 
     AND Y.USERDEF1=X.NMSOFCDE 
     AND Y.ITEMCODE=Z.ITEMCODE 
     AND Z.DOCTDATE BETWEEN NVL(:P11,Z.DOCTDATE) AND NVL(:P12,Z.DOCTDATE) 

And Here's the ouput

但因爲某些原因,我不能使用X.NMHRDCDE='PKZ'在。所以,我只是在使用CASE WHEN Expression時使用X.NMHRDCDE='PKZ'。就像那樣: -

SELECT DISTINCT Z.ITEMDESC, 

CASE 
WHEN X.NMHRDCDE='PKZ' 
THEN X.NMCODDES 
END AS CODE 

FROM NMCODMAS X, NMITEMAS Y, NMSALREC Z 

WHERE 
     -- X.NMHRDCDE='PKZ' 
     Y.FINISHGD='Y' 
     AND X.COMPCODE=Z.COMPCODE 
     AND Y.COMPCODE=Z.COMPCODE 
     AND X.COMPCODE=Y.COMPCODE 
     AND Y.USERDEF1=X.NMSOFCDE 
     AND Y.ITEMCODE=Z.ITEMCODE 
     AND Z.DOCTDATE BETWEEN NVL(:P11,Z.DOCTDATE) AND NVL(:P12,Z.DOCTDATE) 

在這種情況下,每行都被複制了一個NULL NMCODDES字段。檢查輸出 - output

我不明白爲什麼每個項目都有一個額外的空行。在上面的代碼中使用ELSE並沒有什麼區別。因爲我可以保證在我的數據庫中每個項目都有獨特的NMHRDCDE。所以,即使在使用ELSE的情況下也不能解決我的問題。

有人可以幫我指出問題嗎?

回答

1

的唯一辦法忽略的行是:

select * from (/*YOUR QUERY*/) where code is not null; 

由於WJack寫下你的空值ruturned時情況不匹配,這是正確的行爲。 Where子句定義將返回哪些行,大小寫定義將返回行的內容。所以,你的第二個查詢返回行任何X.NMHRDCDE但不具備X.NMHRDCDE != 'PKZ'

+0

是的..它的工作。非常感謝。還有一件事...可以這種格式被用作嵌套?? –

+0

@ W.Jack抱歉,但我不明白。你是什麼意思的格式?你的意思是嵌套的分析函數其他查詢或其他功能? – Kacper

+0

沒有..其實我的意思是使用'select * from(/ * YOUR QUERY * /)where code is not null;'在另一個類似的查詢中嵌套... –

1

試試這個:

select a.ITEMDESC,b.CODE from 
(SELECT DISTINCT Z.ITEMDESC 

FROM NMCODMAS X, NMITEMAS Y, NMSALREC Z 

WHERE 
     -- X.NMHRDCDE='PKZ' 
     Y.FINISHGD='Y' 
     AND X.COMPCODE=Z.COMPCODE 
     AND Y.COMPCODE=Z.COMPCODE 
     AND X.COMPCODE=Y.COMPCODE 
     AND Y.USERDEF1=X.NMSOFCDE 
     AND Y.ITEMCODE=Z.ITEMCODE 
     AND Z.DOCTDATE BETWEEN NVL(:P11,Z.DOCTDATE) AND NVL(:P12,Z.DOCTDATE)) as a 


LEFT JOIN 

(SELECT DISTINCT Z.ITEMDESC, 

CASE 
WHEN X.NMHRDCDE='PKZ' 
THEN X.NMCODDES 
END AS CODE 

FROM NMCODMAS X, NMITEMAS Y, NMSALREC Z 

WHERE 
     -- X.NMHRDCDE='PKZ' 
     Y.FINISHGD='Y' 
     AND X.COMPCODE=Z.COMPCODE 
     AND Y.COMPCODE=Z.COMPCODE 
     AND X.COMPCODE=Y.COMPCODE 
     AND Y.USERDEF1=X.NMSOFCDE 
     AND Y.ITEMCODE=Z.ITEMCODE 
     AND Z.DOCTDATE BETWEEN NVL(:P11,Z.DOCTDATE) AND NVL(:P12,Z.DOCTDATE)) as b 
on a.ITEMDESC = b.ITEMDESC 
+0

它不工作價值.... :( –

+0

我忘了,這是工作,如果你使用的代碼不爲空,儘管在第二個查詢僅 –

相關問題