如果“IN”语句中不存在值,则将值显示为“0”

时间:2017-07-21 20:57:18

标签: sql case where exists

我的查询有以下结果集(包括一些选择的语句,联接和where子句,因为我只需要如何实现这一点的一般方法):

Select *
From hsi.itemdata
Where hsi.itemdata.itemtypenum in ('965','502','530','336','513','506','507','514','515','516')


ItemTypeNum |        ItemType        | DocTypeCount<br/>
502         | Consultation Report    |       4       <br/>
506         | Discharge Summary      |       10       <br/>
336         | ED Nurse Notes    |       2       <br/>
513         | ED Provider Notes    |       8       <br/>
514         | History and Physical    |       15       <br/>

我希望它显示所有内容,即使它在in语句中不存在且计数为'0'。像这样......

ItemTypeNum |        ItemType        | DocTypeCount<br/>
502         | Consultation Report    |       4       <br/>
506         | Discharge Summary      |       10       <br/>
336         | ED Nurse Notes    |       2       <br/>
513         | ED Provider Notes    |       8       <br/>
514         | History and Physical    |       15       <br/>
515         | *Appropriate Value*    |       0       <br/>
516         | *Appropriate Value*    |       0       <br/>
530         | *Appropriate Value*    |       0      <br/>
507         | *Appropriate Value*    |       0       <br/>
965         | *Appropriate Value*    |       0       <br/>

2 个答案:

答案 0 :(得分:2)

在实践中,您将使用left join。确切的语法取决于数据库。这是一个适用于SQL Server和Postgres的版本,例如:

Select v.itemtypenum,
       coalesce(id.ItemType, '*Appropriate Value*') as ItemType,
       coalesce(DocTypeCount, '') as DocTypeCount
From (values ('965'), ('502'), ('530'), ('336'), ('513'), ('506'), ('507'), ('514'), ('515'), ('516')
     ) v(itemtypenum) left join
     hsi.itemdata id
     on id.itemtypenum = v.itemtypenum;

注意:虽然并非所有数据库都支持values子句中的from,但几乎所有数据库都有一些机制来动态创建表。这个想法是一样的,但语法会有所不同。

答案 1 :(得分:1)

一种方法是在CASE的选择中使用DocTypeCount

SELECT ...
       CASE 
       WHEN hsi.itemdata.itemtypenum IN ('965','502','530','336','513','506','507','514','515','516')
       THEN DocTypeCount
       ELSE 0
       END AS DocTypeCount
FROM hsi.itemdata

当然,根据您的实际查询以及获取这些列的方式,这可能会变得更加复杂。