我的查询有以下结果集(包括一些选择的语句,联接和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/>
答案 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
当然,根据您的实际查询以及获取这些列的方式,这可能会变得更加复杂。