我有一个名为Orders的表:
OrderItemID CustomerIDNumber OrderProcessed
1 9212060068089 False
2 6412180017080 False
3 9212060068089 False
4 5508245127003 False
5 9212060068089 False
我想做的事情,我似乎真的在努力纠正,是选择订单处理错误的所有唯一客户ID号。
现在这很简单,通过使用DISTINCT,但我正在努力解决的问题部分是,我希望客户ID号仍然按订单商品ID维护订单。所以示例输出应该是:
CustomerIDNumber OrderProcessed
9212060068089 False
6412180017080 False
5508245127003 False
请注意:处理订单中的所有价值均为假,在我的表格中显而易见,订单处理将有一些真正的价值。
以下是我目前获得的错误输出:
CustomerIDNumber OrderProcessed
5508245127003 False
6412180017080 False
9212060068089 False
可以看出,它按升序对客户ID号进行排序,这不是我想要的。
答案 0 :(得分:5)
如何分组和订购?
SELECT CustomerIDNumber, max(OrderProcessed)
FROM dbo.Orders
WHERE OrderProcessed = 'False'--or however you're implementing your boolean here
GROUP BY CustomerIDNUmber
ORDER BY min(OrderItemID)
答案 1 :(得分:3)
您可以使用ROW_NUMBER
:
;WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY CustomerIDNumber ORDER BY OrderItemID)
FROM dbo.Orders
WHERE OrderProcessed = 'False'
)
SELECT CustomerIDNumber, OrderProcessed
FROM CTE
WHERE RN = 1
ORDER BY OrderItemID