SQL>编辑数据集的小数选择总和(列)

时间:2014-01-07 19:42:44

标签: c# sql dataset report reportviewer

我正在使用这个sql代码

select DATEPART(hour, date) as oHour, SUM(orders.total) as total from orders group by DATEPART(HOUR, date)

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

示例:sql query返回:

oHour     total
---------------
8           589
11         1899
12          890

问题是SQL查询只返回那些小时,有一个跟踪记录。 我需要每小时返回一次记录。 实施例

oHour    total
--------------
8          589
9            0
10           0
11        1899
12         890

如何编辑SQL查询?

3 个答案:

答案 0 :(得分:0)

 select DATEPART(hour, date) as oHour, SUM(COALESCE(orders.total, 0)) as total
 from orders
 group by DATEPART(HOUR, date)

对于没有订单的orders.total,SUM运算符返回null。使用COALESCE,它将选择最高优先级的数据类型(其中所有类型的优先级都高于NULL)。

答案 1 :(得分:0)

嗯,这很难看,但是这是可能的,因为另一个答案可能在你的情况下不起作用,还没有其他任何内容发布。

  • 我不知道这是否表现不佳。它可能很好。
  • 我不知道你是否可以在某种程度上生成临时表而不是做二十几个工会。
  • 你实际上可以创建一个新表,每小时一个记录,以及一个"总计"每个记录中包含0的列,然后在执行union all之前在该表上执行group by
  • 这是在DB2中完成的,这是我目前唯一可以访问的环境。我没有DATEPART,所以在此之前您可能需要做一些修改。
  • 不确定您所处的环境,但Oracle使用dual,DB2通常使用sysibm.sysdummy1,我认为您不需要SQL Server({{1}应该够了。)

查询:

SELECT 0, 0

答案 2 :(得分:0)

试试这个

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

此代码返回每天每小时的总和