2016-12-30 169 views
0

我試圖寫在SQL CASE語句。Case語句與WHERE條件的SQL

的DB結構如下:

============================================== 
tender_id | file_no | subject 
============================================== 

150001   16/41  Against Shipment 
150005   16/42  Pending 
150008   16/43  Shipment Clause 
1500081  16/43  NULL or Empty 
1500082  16/43  NULL or Empty 
============================================== 

我想寫一個CASE語句,顯示的主題。標準是,如果主體是NULL or EMPTY,那麼它應該獲取標準where file_no = file_no輸入主題的主題。在這種情況下,自這些匹配的file_no以來,tender_id 1500081和1500082應該將主題作爲「Shipment條款」。

任何人都可以幫助我嗎?

+0

你能提供發生故障的完整的SQL語句? – soundslikeodd

+0

如果以SQL小提琴的形式表達它,它可能會幫助您解答問題。 –

回答

0

您可以用自連接解決這個問題:

SELECT t1.tender_id, t2.file_no, 
    CASE t1.subject 
    WHEN 'NULL or Empty' THEN t2.subject 
    ELSE t1.subject END AS subject 
FROM YourTableName AS t1 
JOIN YourTableName AS t2 
    ON (t2.file_no = t1.file_no AND t2.subject <> 'Null or Empty'); 

這是假設只有一個被檢查者設定,每個file_no一行。

更新:我創建了一個SQLFiddle演示此查詢。據我所知,這符合您描述的問題。

+0

由於某種原因,它無法正常工作。我正在檢查原因。 –

+0

我已經更新了我試過的問題。你能幫我解決這個問題嗎? –

0

Sqlfiddle here

我假設前兩個欄是int你可以根據你的數據庫更改,並相應修改。

假設你將永遠有file_no表中您可以通過file_no隨時搜索,這將給你期望的結果

SELECT subject 
FROM [table_name] 
WHERE file_no = (SELECT file_no FROM [table_name] where tender_id = [required_tender_id]) 
AND subject IS NOT NULL;