0

我有一张桌子

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

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

例如

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

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

4

1 回答 1

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

这给了我一个输出:

在此处输入图像描述

于 2012-11-29T13:19:35.607 回答