我陷入了这个问题。
CustomerId | EmployeeID | OrderDate|
1 2 2013-01-01
2 2 2013-01-01
2 2 2013-01-02
3 1 2013-02-14
3 2 2013-01-02
4 2 2013-01-03
5 2 2013-01-04
6 2 2013-01-06
7 2 2013-01-05
我不知道该怎么问,但我希望我会尽力而为。
我想了解哪个员工在3天内销售了多少产品 例如:EmployeID 2在
中销售了一些产品 2013-01-01,2013-01-01 = 1. day (2 sells)
2013-01-02 = 2.day (2 sell)
2013-01-03 = 3.day (1 sell)
所以我们可以在3天内看到Employe销售了5款产品。和
2013-01-04 = 1.day (1 sell)
2013-01-05 = 2.day (1 sell)
2013-01-06 = 3.day (1 sell)
员工在另外3天内又卖了3个。所以输出表看起来像
EmployeID | SoldProductIn3Days|
2 5
2 3
如何在t-sql中查询?
答案 0 :(得分:2)
已更改答案以满足评论的要求。
DECLARE @MySales AS TABLE
(
CustomerID INT
,EmployeeID INT
,OrderDate DATE
);
WITH Sales
AS ( SELECT OrderDate
,EmployeeID
,ROW_NUMBER() OVER ( PARTITION BY employeeid ORDER BY OrderDate ) AS RowNum
FROM @MySales),
SalesCalc
AS ( SELECT OrderDate
,EmployeeID
,CONVERT(INT, Rownum / 3.01) AS MyGrouping
FROM Sales)
SELECT EmployeeID, MyGrouping, COUNT(*)
FROM SalesCalc
GROUP BY EmployeeID, MyGrouping
我已经使用表变量来模拟你的表,但只需取出我的表变量并将表放在那里。这应该可以解决问题。当我将RowNumber除以3.1时,它会在前3天生成0,0,0而不是接下来3天生成1,1,1依此类推,最后所有内容都是分组并计算在内。