例如
我有2个表客户和订单
客户 有专栏 CustomerID,名称
订单包含OrderID,OrderedOn
列其中OrderedOn是DateTime
现在我想要一个能给我
的查询CustomerID OrderID和OrderTally
其中OrderTally =第一个订单的'Initial' OrderTally ='InMiddle'用于中间的一切 和 OrderTally ='最终'如果是最后一个订单并且是30天前,
我正在尝试为OrderTally创建一个Case语句
并且苦苦挣扎
如何检查OrderID是第一个还是最后一个还是中间
-- The First Order
CASE WHEN OrderID IN (...)
THEN 'Initial'
-- The Last Order
WHEN OrderID IN (...)
THEN 'Final'
ELSE
'InTheMiddle'
END
我正在考虑编写排名声明,然后检查排名是否是第一位,如果排名=所有订单的总计数,那么最后......但这看起来有点复杂。
有没有一种简单的方法可以做到这一点?
答案 0 :(得分:2)
这个怎么样:
SELECT o.CustomerId, o.OrderId,
CASE
WHEN o.OrderedOn = o2.FirstOrderDate THEN 'Initial'
WHEN o.OrderedOn = o2.LastOrderDate THEN 'Final'
ELSE 'InTheMiddle'
END AS OrderTally
FROM [Orders] o
JOIN
(
SELECT CustomerId, MIN(OrderedOn) AS FirstOrderDate, MAX(OrderedOn) AS LastOrderDate
FROM [Orders]
GROUP BY CustomerId
) o2 ON o.CustomerId = o2.CustomerId
我假设客户不会有2个具有相同OrderOn日期/时间的订单 - 如果他们这样做,这可能会导致2个订单被归类为“Initial”或“Final”。但这似乎是一个合理的假设。