我正在使用这个sql代码。
select DATEPART(hour, date) as oHour, SUM(orders.total) as total from orders group by DATEPART(HOUR, date)在C#数据集中在ReportViewer控件中创建图表。
示例: sql查询返回以下内容:
oHour total
---------------
8 589
11 1899
12 890问题是SQL查询只返回那些小时,有跟踪记录。我需要返回每小时的记录。示例
oHour total
--------------
8 589
9 0
10 0
11 1899
12 890如何编辑SQL查询?
发布于 2014-01-08 16:32:34
尝尝这个
select
s.number as oHour,
SUM(isnull(o.total,0)) as total
from
master..spt_values s
left join orders o on s.number = DATEPART(HOUR, date)
where
s.type = 'P'
and s.number between 0 and 23
group by
s.number此代码返回一天中每小时的和。
发布于 2014-01-07 19:47:57
select DATEPART(hour, date) as oHour, SUM(COALESCE(orders.total, 0)) as total
from orders
group by DATEPART(HOUR, date)对于没有订单的orders.total,SUM运算符返回null。通过合并,它将选择最高优先级的数据类型(其中所有类型的优先级都高于NULL)。
发布于 2014-01-08 16:03:23
嗯,这是丑陋的,但这里有一种可能性,因为另一个答案可能不适用于你的情况,其他的还没有发布。
0的“总计”列,然后在执行group by之前在该表上执行一个union all。DATEPART,所以在此之前您可能需要做一些修改。dual,DB2通常使用sysibm.sysdummy1,我认为Server不需要这两种环境(SELECT 0, 0就足够了)。查询:
SELECT oHour, SUM(total) AS total
FROM (
SELECT HOUR(date) AS oHour, total FROM parts.g_orders
UNION ALL
SELECT 0, 0 FROM DUAL
UNION ALL
SELECT 1, 0 FROM DUAL
UNION ALL
SELECT 2, 0 FROM DUAL
UNION ALL
SELECT 3, 0 FROM DUAL
UNION ALL
SELECT 4, 0 FROM DUAL
UNION ALL
SELECT 5, 0 FROM DUAL
UNION ALL
SELECT 6, 0 FROM DUAL
UNION ALL
SELECT 7, 0 FROM DUAL
UNION ALL
SELECT 8, 0 FROM DUAL
UNION ALL
SELECT 9, 0 FROM DUAL
UNION ALL
SELECT 10, 0 FROM DUAL
UNION ALL
SELECT 11, 0 FROM DUAL
UNION ALL
SELECT 12, 0 FROM DUAL
UNION ALL
SELECT 13, 0 FROM DUAL
UNION ALL
SELECT 14, 0 FROM DUAL
UNION ALL
SELECT 15, 0 FROM DUAL
UNION ALL
SELECT 16, 0 FROM DUAL
UNION ALL
SELECT 17, 0 FROM DUAL
UNION ALL
SELECT 18, 0 FROM DUAL
UNION ALL
SELECT 19, 0 FROM DUAL
UNION ALL
SELECT 20, 0 FROM DUAL
UNION ALL
SELECT 21, 0 FROM DUAL
UNION ALL
SELECT 22, 0 FROM DUAL
UNION ALL
SELECT 23, 0 FROM DUAL)
GROUP BY oHourhttps://stackoverflow.com/questions/20980330
复制相似问题