如果“IN”语句中不存在值,则将值显示为“0”
Posted
技术标签:
【中文标题】如果“IN”语句中不存在值,则将值显示为“0”【英文标题】:IF no value exists in "IN" statement, show values as '0' 【发布时间】:2017-07-21 20:57:18 【问题描述】:我的查询有以下结果集(不包括一些选择语句、连接和 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/>
【问题讨论】:
用您正在使用的数据库标记您的问题。 【参考方案1】:实际上,您会使用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;
注意:虽然并非所有数据库都支持from
子句中的values
,但几乎所有数据库都有一些动态创建表的机制。思路是一样的,只是语法会有些不同。
【讨论】:
当您有一个已知的 IN 值列表时,此方法有效。如果 OP 询问的是 IN 值的动态列表,它会变得更加复杂,并且可能在查询之外得到更好的处理。【参考方案2】:一种方法是在您选择 DocTypeCount
时使用 CASE
:
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
当然,这可能会变得更加复杂,具体取决于您的实际查询以及获取这些列的方式。
【讨论】:
以上是关于如果“IN”语句中不存在值,则将值显示为“0”的主要内容,如果未能解决你的问题,请参考以下文章
PHP/SQL - 如果 foreach() 中的 ID 相同,则将值相加
php 在数组中的特定键后插入值或键/值对。如果key不存在,则将值附加到数组的末尾。
php 在数组中的特定键后插入值或键/值对。如果key不存在,则将值附加到数组的末尾。