我正在尝试在SQL中编写CASE语句。
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
获取输入主题的主题。在这种情况下,tender_id 1500081和1500082应该将主题作为'装运条款'因为那些匹配的file_no。
有人可以帮我吗?
答案 0 :(得分: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来演示此查询。这符合您所描述的问题,正如我所理解的那样。
答案 1 :(得分: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;