[英]SQL query for total sales by each department for each day not working
希望这很简单。 我正在寻找的是每天各部门的总销售额。 有多个部门,在具有多个日期的多个商店中。
我得到的是该部门中每笔交易的行。 我认为这是因为SQL正在执行其所要执行的操作,并且由于交易时间而使我为每次销售显示一行。 我每天都在尝试分组,但是我肯定我缺少一些简单的东西。
这是一个样本表
SalesTotal | Department | StoreNumber | SalesDateTime
---------- | ---------- | ----------- | -------------------
3.96 Books 5000 2016-10-01 10:01:11
0.99 Books 5000 2016-10-01 10:03:40
3.98 Books 5000 2016-10-01 10:19:45
0.99 Books 5000 2016-10-01 10:27:58
2.98 Women 5000 2016-10-01 11:50:11
1.49 Women 5000 2016-10-01 11:58:35
2.97 Women 5000 2016-10-01 12:05:11
4.15 Women 5000 2016-10-01 12:06:20
3.98 Mens 5000 2016-10-01 12:55:03
4.98 Mens 5000 2016-10-01 13:02:13
4.47 Mens 5000 2016-10-01 13:19:40
我期望的是
SalesTotal | Department | StoreNumber | SalesDateTime
---------- | ---------- | ----------- | -------------------
9.93 Books 5000 2016-10-01
11.58 Womens 5000 2016-10-01
13.43 Mens 5000 2016-10-01
我认为这只是一个SUM和分组查询,但我无法以这种方式得出。 我要从表中获取数据并将其放入临时表中,因为我还有其他表中的其他数据(例如商店名称等),但是上面的值是准确的。 下面是查询(是的,我有几个变量,但仅用于选择前端的日期)...
SELECT SUM(Price) AS SalesTotal
, Department
, StoreNumber
, SaleDateTime
INTO #tblSales
FROM LineItem
WHERE SaleDateTime BETWEEN @StartDate AND @EndDate
GROUP BY Department, T.StoreNumber, SaleDateTime
SELECT *
FROM #tblSales
感谢您查看,如果需要更多信息,请告诉我。 如前所述,我似乎无法弄清分组部分所缺少的内容。 感谢您能提供的任何帮助。
您正在按日期和时间分组,这意味着如果它们不相同,则不会将它们分组。 要仅基于日期进行分组,您必须将TransactionDateTime
转换为Date
,然后对此进行选择/分组。
SELECT SUM(Price) AS SalesTotal
, Department
, StoreNumber
, CONVERT(date, SaleDateTime) As SaleDate
INTO #tblSales
FROM LineItem
WHERE SaleDateTime BETWEEN @StartDate AND @EndDate
GROUP BY Department, T.StoreNumber, CONVERT(date, SaleDateTime)
SELECT *
FROM #tblSales
您提供的信息有些冲突,因为查询使用的是一个称为SaleDateTime
的字段,而示例表使用的是TransactionDateTime
。 上面的示例使用SaleDateTime
。
这是因为您也使用日期中的时间进行分组,并且它们之间也存在差异,因此,除非行中的确切时间相同,否则行将无法按照您的需要进行分组。 尝试以下方法:
select sum(Price) as SalesTotal,
Department,
StoreNumber,
min(convert(varchar, SaleDateTime, 102)) as SaleDateTime
from LineItem
where SaleDateTime between @StartDate and @EndDate
group by Department,
T.StoreNumber,
year(SaleDateTime),
datepart(dy, SaleDateTime)
您的查询似乎还可以,问题出在查询的变量/列名上,因为我在发布数据时对您的问题进行了细微的更改测试,并且效果很好,我执行的查询与您提供的数据相同(已修改)
SELECT SUM(SalesTotal), Department, StoreNumber
FROM Test
Where TransactionDateTime = '2016-10-01 10:01:00.000'
GROUP BY Department, StoreNumber, TransactionDateTime
如果问题仍然存在,请在此处粘贴您的错误/结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.