每个部门每天不工作的总销售额的SQL查询

时间:2016-12-05 20:12:23

标签: sql sql-server-2012

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

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

感谢您查看,如果需要更多信息,请与我们联系。如上所述,我似乎无法弄清楚我对分组部分缺少什么。我感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您按日期分组,这意味着如果它们不相同,则不会对其进行分组。要仅根据日期进行分组,您必须将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

答案 1 :(得分:1)

这是因为您使用日期中的时间进行分组,并且它们之间存在差异,除非行中的行具有相同的确切时间,否则它将无法按需要进行分组。试试这个:

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)

答案 2 :(得分:0)

您的查询似乎没问题,问题在于您的查询的变量/列名称,因为我在发布数据时测试了您的问题并进行了微小的更改并且工作正常,我执行的查询是(修改的)按照您提供的数据

SELECT SUM(SalesTotal), Department, StoreNumber
FROM Test
Where TransactionDateTime = '2016-10-01 10:01:00.000'
GROUP BY  Department,  StoreNumber, TransactionDateTime

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