如果“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不存在,则将值附加到数组的末尾。

如果匹配条件,则将值替换为上一行

如果它是一个函数,则将值推送到 javascript 数组的问题

如果javascript中不存在值,如何推送到多维数组