2009-06-02 2 views
1

에 삽입하기 전에 테이블 이름 #의 TEMP1에는 다음과 같은 열이 포함됩니다 다음과 같습니다SQL 합계 열 내 SPROC에서 #temp

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을 갖고 있기 때문에& ReservedQtyCASE 문에 열 각 StoreId에 대해 여러 행이 표시됩니다.

나는 내가 (다시) 결과를 요약하기위한 간단한 방법이 있는지 내가 원하는 다음과 같은 결과 집합을 얻을 수 있도록 CommittedQty을 기반으로 알고 싶습니다 :

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

내가 실현을 또 다른 임시 테이블을 사용하지만 SELECT

답변

1

내가 임시 테이블을 사용하지 것이다 안에이 작업을 수행 할 수있는 쉬운 방법이 있다면 궁금 수 있습니다.

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을 사용하지 않으면 내 생각 엔 당신이 이미 적어도 하나는 너무 많이 사용하고 있는지 :)

당신은 전체 CASE 문 주위에 SUM을 둘 필요가있다 # 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 
.