首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL >编辑select (列)按小时分组数据集

SQL >编辑select (列)按小时分组数据集
EN

Stack Overflow用户
提问于 2014-01-07 19:42:44
回答 3查看 336关注 0票数 1

我正在使用这个sql代码。

代码语言:javascript
复制
select DATEPART(hour, date) as oHour, SUM(orders.total) as total from orders group by DATEPART(HOUR, date)

在C#数据集中在ReportViewer控件中创建图表。

示例: sql查询返回以下内容:

代码语言:javascript
复制
oHour     total
---------------
8           589
11         1899
12          890

问题是SQL查询只返回那些小时,有跟踪记录。我需要返回每小时的记录。示例

代码语言:javascript
复制
oHour    total
--------------
8          589
9            0
10           0
11        1899
12         890

如何编辑SQL查询?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-08 16:32:34

尝尝这个

代码语言:javascript
复制
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

此代码返回一天中每小时的和。

票数 0
EN

Stack Overflow用户

发布于 2014-01-07 19:47:57

代码语言:javascript
复制
 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)。

票数 0
EN

Stack Overflow用户

发布于 2014-01-08 16:03:23

嗯,这是丑陋的,但这里有一种可能性,因为另一个答案可能不适用于你的情况,其他的还没有发布。

  • 我不知道这是不是糟糕的表现。可能没什么问题。
  • 我不知道你能不能做个临时的临时工作,而不是做二十几个工会。
  • 实际上,您可以创建一个新表,其中每小时有一条记录,每条记录都有一个包含0的“总计”列,然后在执行group by之前在该表上执行一个union all
  • 这是在DB2中完成的,这是我目前唯一可以访问的环境。我没有DATEPART,所以在此之前您可能需要做一些修改。
  • 不确定您所处的环境,但Oracle使用dual,DB2通常使用sysibm.sysdummy1,我认为Server不需要这两种环境(SELECT 0, 0就足够了)。

查询:

代码语言:javascript
复制
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 oHour
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20980330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档