繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM