0

私はテーブルを持っています

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

その人は別の店で同じ注文を注文しました(後でどちらが提供するかは彼らが決定します)が、注文ごとに1つの数量のみを表示する必要があります。注文qty = 0IDが同じ場所を設定するのを手伝ってください。shopid > min(shopID)

例えば

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

これは実際の問題の例にすぎませんpls

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 (Common Table Expression) からの選択では、 の注文のテーブルに格納されている数量を返し、RowNum = 1その数量を抑制し、同じ のすべての追加行に対して代わりに 0 を返しますOrderID

これにより、次の出力が得られます。

ここに画像の説明を入力

于 2012-11-29T13:19:35.607 に答える