SQL Server 2005查询,将qtys更新为0,其中orderid<>分钟(订单ID)

时间:2012-11-29 12:49:52

标签: sql-server-2005

我有一张桌子

OrderID   Qty    ShopID
-----------------------
1         50     10
1         50     11
2         10     15
2         10     18

该人在不同的商店订购了相同的订单(他们稍后将决定哪一个会提供),但我必须每个订单只显示一个数量,请帮助设置订单ID相同的qty = 0shopid > min(shopID)

e.g。

OrderID   Qty    ShopID
-----------------------
1         50     10
1         0      11
2         10     15
2         0      18 

这只是现实世界问题的一个例子

1 个答案:

答案 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

这给了我一个输出:

enter image description here