SQL查询每个部门的总销售额,每天不起作用



希望这很简单。我正在寻找的是每天按部门按部门总销售。有多个部门,在多个有多个日期的商店中。

我得到的是该部门每次销售的一排。我认为这是因为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 

我认为这只是一个总和分组查询,但我无法以这种方式出现。我正在从表中获取数据并将其放入温度表中,因为我从其他表中有其他数据(例如StoreName等),但是上面的值是准确的。以下是查询(是的,我有几个变量,但仅用于在前端选择日期)...

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

如果问题仍然存在,请在此处粘贴您的错误/结果

最新更新