2009-06-02 11 views
1

Dans mon SPROC une table nommée # temp1 contient les colonnes suivantes:SQL Somme colonne avant de l'insérer dans #temp

#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 

depuis que je Unfortunatly dois GROUP BY le QtyOnHand & ReservedQty colonnes dans mon instruction CASE Je reçois 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 pourrait utiliser une autre table temporaire, mais se demandait s'il y avait un moyen plus facile d'y arriver dans l'instruction SELECT

Répondre

1

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

Vous devez mettre la SOMME dans toute votre instruction CASE:

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

Posté la question sur un autre forum et a reçu la même réponse sur les deux Merci les gars – Neomoon

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

Pour commencer: Si vous pouvez éviter d'utiliser #temp et ## tables temporaires, vous devriez. Ce sont des petites choses méchantes qui causent le réchauffement de la planète et les inondations subites et qui sont responsables de toutes sortes d'émissions de gaz à 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 sélectionner dans 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 
.
Questions connexes