[英]Pivoting in T-SQL based on date offset
有一个名为Orders的表,该表具有三列:
订单编号
用户身份
订购日期
我需要知道,过去X个月,A用户下了1个订单,B用户下了2个订单,C用户下了3个订单,依此类推。
因此,输出是一个带有MinDate字段的表,然后是从1到N的每个订单数的列,例如:
declare @t table (
MinDate datetime,
o_1 int,
o_2 int,
o_3 int,
o_4 int,
...
o_N int
)
每个字段都包含在MinDate和当前日期之间下达这么多订单的唯一客户(UserID)的数量。 例如,如果一行的MinDate ='2009-09-01',则o_6包含在9月1日到现在之间下了6个订单的客户数量,依此类推。
我尝试了几种方法,例如将LEFT JOIN Orders移至数字表等,但是在将正确的唯一用户数计入每一列时遇到了麻烦。 我可以用游标轻松(缓慢地)执行此操作,但这似乎是作弊。
有什么建议么? 如果我的解释没有道理,请告诉我...
这是一个刺。 它对我来说最重要的部分是动态旋转(换句话说,您可以具有1-N阶的无限范围)。 但是,它可能将您(或其他人)指向总体方向。
DECLARE @Orders TABLE
(
OrderID INT ,
UserID INT ,
OrderDate SMALLDATETIME
)
INSERT INTO @Orders
( OrderID, UserID, OrderDate )
VALUES ( 1, 1, '20090102' ),
( 2, 1, '20090102' ),
( 3, 2, '20090102' ),
( 4, 2, '20090102' ),
( 5, 2, '20090102' ),
( 6, 3, '20090102' ),
( 7, 4, '20090102' )
SELECT *
FROM ( SELECT UserID ,
COUNT(OrderID) AS CountOrders
FROM @Orders o
WHERE OrderDate > '20090101'
GROUP BY UserID
) x PIVOT ( COUNT(UserID) FOR CountOrders IN ( [1], [2], [3], [4] ) ) AS p
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.