要在报表生成器3.0中使用的SQL查询:将结果分组在一起

时间:2014-09-24 07:50:06

标签: sql

我正在尝试制作一份显示的销售报告

itemid          salesdate       qty_sold
item1           1/9/14          3
item1           1/9/14          2
item1           1/9/14          5
item2           2/9/14          2
item3           4/9/14          1

我遇到的问题是因为星期一例如3的销售可能由1-3个不同的销售订单组成,我只能让它显示多行而不是按我的意愿组合在一起。

我想制作一份报告,显示当天的商品ID,购买日期和总销售额,而不是包含该商品的所有销售清单(如果有意义的话)?

提前致谢

更多详情:

    SELECT st.orderdate, sl.itemid, sl.qty
      FROM salestable st
INNER JOIN salesline sl
        ON salestable.salesid = salesline.salesid

目前,它显示如下结果。

OrderDate     ItemId     Qty    
1/1/14        101        1
1/1/14        101        3
1/1/14        102        1

如果可能,我想将行分组,每个日期只显示1行&的itemid。它不起作用,因为它们显然是数据库中的单独行,因为它们具有不同的订单号等。

OrderDate     ItemId    Qty
1/1/14        101       4
1/1/14        102       1
2/1/14        102       5
2/1/14        101       2

如果无法完成,那么报表生成器中的分组类型就足够了,但我无法看到这样做的方法!

干杯

3 个答案:

答案 0 :(得分:2)

如果我理解正确,你的问题在于对记录进行排序。

如果是这种情况,请将其附加到SQL代码中。

ORDER BY salesdate DESC

答案 1 :(得分:0)

对于您在问题中包含的SQL,您需要将聚合函数SUM与GROUP BY语句一起使用。

    SELECT st.orderdate, sl.itemid, SUM(sl.qty)
      FROM salestable st
INNER JOIN salesline sl
        ON salestable.salesid = salesline.salesid
  GROUP BY st.orderdate, sl.itemid

你提到了其他阻止这种情况的字段,但不要在你的例子中包含它们。 如果您可以修改您的问题以包含这些问题,我们可以提出明确的答案。

根据您对日期的评论,这是一种可能的解决方案:

    SELECT  DATEADD(dd, 0, DATEDIFF(dd, 0, st.orderdate)), sl.itemid, SUM(sl.qty)
      FROM salestable st
INNER JOIN salesline sl
        ON salestable.salesid = salesline.salesid
  GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, st.orderdate)), sl.itemid

答案 2 :(得分:0)

自从我在this SO post上看到它以来,我已使用此格式更改日期:

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

我希望这会有所帮助。