2016-12-30 211 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;