假设我有这张表:
|MY_TABLE|
| ID_COL |
| 1 |
| 1 |
| 2 |
| 2 |
现在我想在这个表上做一个包括零结果的计数查询。 当我尝试运行我的查询时:
Select ID_COL,count(ID_COL)
from MY_TABLE
where ID_COL = '1' or ID_COL = '2' or ID_COL = '100' group by ID_COL
结果只有两行。我想为ID_COL =' 100'显示0。 有没有办法做到这一点?
感谢。
BTW,我正在使用DB2。
答案 0 :(得分:2)
您必须动态创建一个表,以包含每个ID的记录:
select 1 as id_col union all select 2 union all select 100;
然后您可以从此表中选择ID并显示计数:
select all_ids.id_col, count(my_table.id_col)
from (select 1 as id_col union all select 2 union all select 3) all_ids
left join my_table on my_table.id_col = all_ids.id_col
group by all_ids.id_col;
编辑:现在您使用DB2标记了您的请求:DB2需要一个虚拟表来从中选择一个值。而不是select 1
必须写select 1 from sysibm.sysdummy1
。完整的查询:
select all_ids.id_col, count(my_table.id_col)
from
(
select 1 as id_col from sysibm.sysdummy1
union all
select 2 from sysibm.sysdummy1
union all
select 3 from sysibm.sysdummy1
) all_ids
left join my_table on my_table.id_col = all_ids.id_col
group by all_ids.id_col;