我有一个 select 语句,它返回两列,一个日期列和一个count(value)
柱子。当。。。的时候count(value)
列没有任何记录,我需要它返回 0。目前,它只是一起跳过该日期记录。
这是查询的基础知识。
select convert(varchar(25), DateTime, 101) as recordDate,
count(Value) as recordCount
from History
where Value < 700
group by convert(varchar(25), DateTime, 101)
这是我得到的一些结果。
+------------+-------------+
| recordDate | recordCount |
+------------+-------------+
| 02/26/2014 | 143 |
| 02/27/2014 | 541 |
| 03/01/2014 | 21 |
| 03/02/2014 | 60 |
| 03/03/2014 | 113 |
+------------+-------------+
请注意,它会跳过 2/28/2014。这是因为count(value)
列没有任何可计数的内容。如何在其中添加日期为 2/28/2014 的记录,并带有recordCount
of 0?
要生成缺失日期的行,您可以将数据连接到日期维度表 http://michaelmorley.name/how-to/create-date-dimension-table-in-sql-server
它看起来像这样:
select convert(varchar(25), ddt.DateField, 101) as recordDate,
count(t.Value) as recordCount
from History h
right join dbo.DateDimensionTable ddt
on ddt.DateField = convert(varchar(25), h.DateTime, 101)
where h.Value < 700
group by convert(varchar(25), h.DateTime, 101)
如果您的表使用 DateTime 列仅存储日期(意味着时间始终是午夜),那么您可以替换它
right join dbo.DateDimensionTable ddt
on ddt.DateField = convert(varchar(25), h.DateTime, 101)
有了这个
right join dbo.DateDimensionTable ddt
on ddt.DateField = h.DateTime
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)