質問

私SPROCでテーブルという名前の#1 TEMP1には、次の列が含まれています

#temp1 (StoreId, StoreDesc, ReservedQty, AvgPrice, QtyOnHand)

私の質問は、

次のクエリに基づいています
INSERT INTO #temp2 (StoreId, StoreDesc, CommittedQty)
(SELECT     StoreId,  StoreDesc, 
    CASE WHEN ReservedQty > QtyOnHand THEN
        sum(QtyOnHand * AvgPrice) 
    ELSE
        sum(ReservedQty * AvgPrice) 
    END AS CommittedQty
    FROM #temp1 
    GROUP BY StoreId, StoreDesc, QtyOnHand, ReservedQty)

サンプルの結果セットは次のようになります:

StoreId                 StoreDesc   CommittedQty    
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94    FramersBranch   0
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94    FarmersBranch   88978
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94    FarmersBranch   0
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94    FarmersBranch   3152
6369D3A6-83BC-4BB0-9A25-86838CD2B7BA    Woodlands   5582
6369D3A6-83BC-4BB0-9A25-86838CD2B7BA    Woodlands   389
私は私のGROUP BY文でQtyOnHandReservedQty列をCASEする必要があるため、

残念ながら、私は、各StoreIdのために複数の行を取得します。

私は私が望む次の結果セットを取得することができるように私はCommittedQtyに基づいて(再び)の結果を合計するための簡単な方法がある場合は、

私が知っていると思います:

StoreId v               StoreDesc   CommittedQty    
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94    FramersBranch   92130
6369D3A6-83BC-4BB0-9A25-86838CD2B7BA    Woodlands   5971

私は、私は別の一時テーブルを使用することができます実現が、これを達成するための簡単な方法があったのか疑問に思っSELECT文の内部

役に立ちましたか?

解決

私は、一時テーブルを使用することはありません。私の推測では、すでに少なくとも1あまりにも多くを使用しているということです。)

あなたはあなたの全体のCASE文の周りにSUMを配置する必要があります:

SUM(AvgPrice *
     CASE
          WHEN ReservedQty > QtyOnHand THEN QtyOnHand
          ELSE ReservedQty
     END)

他のヒント

SELECT  StoreId,  StoreDesc, 
        SUM(
        CASE
        WHEN ReservedQty > QtyOnHand THEN
                QtyOnHand * AvgPrice 
        ELSE
                ReservedQty * AvgPrice
        END
        ) AS CommittedQty
FROM    #temp1 
GROUP BY
        StoreId, StoreDesc

最初のものは最初に:あなたは#TEMPと##一時テーブルを使用して避けることができる場合は、必要があります。彼らは、地球温暖化や鉄砲水が発生し、温室排出量のすべての種類を担当している邪悪な厄介なささいなことです。 (:

は、それが絶対に必要でない限り、一時テーブルを取り除くと、あなたが持っている場合は、サブクエリと交換し、離れてジョークに。

あなたは、単にこの文の周りに別の選択をラップすることができます。

INSERT INTO #temp2 (StoreId, StoreDesc, CommittedQty)
SELECT StoreId, StoreDesc, Sum (CommittedQty)
FROM 
(SELECT         StoreId,  StoreDesc, 
        CASE WHEN ReservedQty > QtyOnHand THEN
                sum(QtyOnHand * AvgPrice) 
        ELSE
                sum(ReservedQty * AvgPrice) 
        END AS CommittedQty
        FROM #temp1 
        GROUP BY StoreId, StoreDesc, QtyOnHand, ReservedQty)
)
GROUP BY StoreId, StoreDesc
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top