2017-07-21 26 views
0

我的查询有以下结果集(不包括一些select语句,连接和where子句,因为我只需要如何完成的一般方法此):如果在“IN”语句中没有值,则将值显示为“0”

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/> 

我想让它显示所有,即使它不会在与“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/> 
+1

用您正在使用的数据库标记您的问题。 –

回答

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; 

注意:虽然并非所有的数据库都支持valuesfrom条款中,几乎都有一些机构用于对动态创建的表。这个想法是一样的,但语法会有所不同。

+0

这适用于您有IN的值的已知列表。如果OP询问IN值的动态列表,则会变得更加复杂,并且可能会更好地在查询之外进行处理。 – Shawn

1

一种方法是在你选择使用CASEDocTypeCount

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 

当然,这可能取决于你的实际查询以及如何你得到这些列变得更加复杂。

相关问题