2016-09-27 22 views
3

每當CL.TYPE = DIAG.TYPE時,下面的case語句應該是檢索數據,然後DIAG.TYPE爲true,如果不是,則爲NULL。這有意義嗎?或者這是做這件事最合乎邏輯的方法嗎?下面的Case語句是否有意義?

(CASE 
WHEN CL.TYPE2 = DIAG.TYPE 
OR CL.TYPE3 = DIAG.TYPE 
OR CL.TYPE4 = DIAG.TYPE 
OR CL.TYPE5 = DIAG.TYPE 
OR CL.TYPE6 = DIAG.TYPE 
OR CL.TYPE7 = DIAG.TYPE 
OR CL.TYPE8 = DIAG.TYPE   THEN SUBSTRING(DIAG.TYPE,2,1) 
           ELSE NULL 
END) 
+0

但這查詢顯示,有7'CL.TYPE'列。所以這就是使用'CASE' *表達式* – Lamak

+1

這個查詢很有意義,但它突出了表格設計中的一些問題。你有什麼被稱爲重複組,它違反了1NF。想想看,如果你需要添加一個Type9,那將是多麼的痛苦。你將不得不改變你的表格和接觸它的每一個查詢。如果這是正確的標準化,你將不需要改變任何東西。 –

+0

如果這些是聲明診斷類型,請參閱您是否可以讓管理員爲您規範化列。 – Beth

回答

4

您的查詢似乎罰款,你可以使用in減少OR重複,使您的查詢更具可讀性:

(CASE 
WHEN DIAG.TYPE in (CL.TYPE2, CL.TYPE3, CL.TYPE4, CL.TYPE5, CL.TYPE6, CL.TYPE7, CL.TYPE8) 
THEN SUBSTRING(DIAG.TYPE,2,1) 
ELSE NULL 
END)