Question

Dans mon SPROC une table nommée # temp1 contient les colonnes suivantes:

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

Ma question est basée sur la requête suivante

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)

Un jeu de résultats de l'échantillon ressemble à ceci:

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

Unfortunatly depuis que je dois GROUP BY les colonnes QtyOnHand et ReservedQty dans ma déclaration CASE-je obtenir plusieurs lignes pour chaque StoreID.

Je voudrais savoir s'il existe un moyen simple pour moi de résumer les résultats (encore une fois) sur la base CommittedQty afin que je puisse obtenir le jeu de résultats suivant, je désire:

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

Je me rends compte que je pouvais utiliser une autre table temporaire, mais me demandais s'il y avait un moyen plus facile d'y arriver dans l'instruction de SELECT

Était-ce utile?

La solution

Je ne voudrais pas utiliser une table temporaire. Je pense que vous utilisez déjà au moins un de trop:)

Vous devez mettre la SOMME dans toute votre instruction CASE:

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

Autres conseils

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

choses importantes d'abord: Si vous pouvez éviter d'utiliser #temp et ## tables de temp, vous devriez. Ils sont mauvaises choses vilaines petites qui causent le réchauffement climatique et les inondations flash et sont responsables de toutes sortes d'émissions à effet de serre. (:

Blagues à part, à moins qu'il est absolument nécessaire, se débarrasser des tables temporaires et la remplacer par une sous requête si vous devez.

Vous pouvez simplement envelopper une autre autour de choisir cette déclaration

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top