我有一个问题,我正在努力确定客户订单
我的数据看起来像这样。
CustomerID Month Year Value
1 2 2011 18
1 2 2012 16
2 1 2011 15
3 1 2012 13
从此我希望返回(对于上述每个标准)
我确信必须有一个优雅的解决方案,但对于我的生活我今天看不到它!
到目前为止,我已经达到了这一点,但是我得到了很多重复,但是我错过了一些明显的东西?
;with t (ID, Yr, Mo)
As
(
Select ID, TransactionYearFK, TransactionMonthFK
From dbo.MyData
)
Select *
From t tC
Full Outer Join t tL On tC.ID = tL.ID And tC.Mo = tL.Mo And tL.Yr = tC.Yr - 1
Where Coalesce(tC.ID, tL.ID) = 21110
Order By tC.Yr, tC.Mo
答案 0 :(得分:2)
如果您希望在一个查询中显示所有结果,则可以像这样重写您的条件:
年份必须不早于最后一年。
月份必须与当月相同,无论是本年还是去年。
假设您想要为每位客户每年返回每月的订单数量,您可以尝试这样的事情:
SELECT
CustomerID,
ThisYear = COUNT(CASE Year WHEN YEAR(GETDATE()) THEN 1 ELSE NULL END),
LastYear = COUNT(CASE Year WHEN YEAR(GETDATE()) THEN NULL ELSE 1 END)
FROM data
WHERE Year >= YEAR(GETDATE()) - 1
AND Month = MONTH(GETDATE())
GROUP BY
CustomerID