2017-07-21 28 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 

當然,這可能取決於你的實際查詢以及如何你得到這些列變得更加複雜。

相關問題