2009-06-02 2 views
1

В моей SPROC таблица с именем # TEMP1 содержит следующие столбцы:SQL Sum колонки перед вставкой в ​​#temp

#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 

Unfortunatly, так как я должен GROUP BYQtyOnHand & ReservedQty столбцы в моей инструкции CASE Я получаю несколько строк для каждого StoreId.

Я хотел бы знать, если есть простой способ для меня, чтобы подвести итоги (опять же) на основе CommittedQty, чтобы я мог получить следующий набор результатов я пожелаю:

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

Я понимаю, может использовать другую временную таблицу, но задавался вопросом, есть ли простой способ для достижения этой цели внутри SELECT заявление

ответ

1

Я бы не использовать временную таблицу. Я предполагаю, что вы уже используете, по крайней мере один слишком много :)

Вы должны поместить SUM вокруг всего Вашего заявления СЛУЧАЯ:

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

Отправил вопрос на другой форум и получил тот же ответ на обоих. Спасибо, ребята – 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

Первые вещи первое: если вы можете избежать использования #temp и ## temp tables, вы должны. Это злые неприятные вещи, которые вызывают глобальное потепление и внезапное наводнение и несут ответственность за все виды выбросов зеленого дома. (:

Шутки друг от друга, если это не является абсолютно необходимым, чтобы избавиться от временных таблиц и заменить его подзапросом, если вы должны

Вы можете просто обернуть другой выбор вокруг этого заявления

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 
.