我有一张桌子
OrderID Qty ShopID
-----------------------
1 50 10
1 50 11
2 10 15
2 10 18
该人在不同的商店订购了相同的订单(他们稍后将决定哪一个会提供),但我必须每个订单只显示一个数量,请帮助设置订单ID相同的qty = 0
和shopid > min(shopID)
e.g。
OrderID Qty ShopID
-----------------------
1 50 10
1 0 11
2 10 15
2 0 18
这只是现实世界问题的一个例子
答案 0 :(得分:1)
您可以尝试这样的事情:
;WITH CTE AS
(
SELECT
OrderID, Qty, ShopID,
RowNum = ROW_NUMBER() OVER (PARTITION BY OrderID ORDER BY ShopID DESC)
FROM
dbo.YourOrderTableHere
)
SELECT
OrderID,
OrderedQty = CASE RowNum
WHEN 1 THEN Qty ELSE 0
END,
ShopID
FROM CTE
基本上,我按OrderID
对数据进行“分区” - 因此给定订单中的每一行都会被分配一个连续的RowNum
。
在从CTE(公用表表达式)中选择时,我返回存储在表中的数量,用于RowNum = 1
的订单,我取消该数量并返回0而不是所有其他行OrderID
。
这给了我一个输出: