case语句与SQL中的where条件

时间:2016-12-30 04:27:21

标签: mysql case

我正在尝试在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。

有人可以帮我吗?

2 个答案:

答案 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;