2012-02-07 3 views
1

table실행 스크립트를 여러 번 구속에 변수를 사용하여

여러 가지 "WHERE"절과 같은 쿼리를 실행 포함하지 않는 표 2에서 Cust1, Cust2, Cust3 열을 채우는 방법이 있나요? 나는 모든 고유 한 고객의 CUSTOMER_ID 열이 다른 테이블을하고 싶은, 이상적으로

INSERT INTO Table2(Cust1_Totals) 
SELECT Fruit, SUM(quantity) 
FROM Table1 
WHERE Customer_ID LIKE 1 
GROUP BY Fruit 

INSERT INTO Table2(Cust2_Totals) 
SELECT Fruit, SUM(quantity) 
FROM Table1 
WHERE Customer_ID LIKE 2 
GROUP BY Fruit 

INSERT INTO Table2(Cust3_Totals) 
SELECT Fruit, SUM(quantity) 
FROM Table1 
WHERE Customer_ID LIKE 3 
GROUP BY Fruit 

을 한 후 나는 각 하나를 참조 할 것 :

예를 들어, 지금은이 일에 의지 것 위 쿼리에서 반복하십시오. SQL Server 2008의

답변

4

당신은 별도의 열에 고객 당 합계를 생성하는 case을 사용할 수

INSERT Table2 
     (Produce, Cust1_Totals, Cust2_Totals, Cust3_Totals) 
SELECT Fruit 
,  SUM(case when Customer_ID = 1 then quantity end) 
,  SUM(case when Customer_ID = 2 then quantity end) 
,  SUM(case when Customer_ID = 3 then quantity end) 
FROM Table1 
WHERE Customer_ID IN (1,2,3) 
GROUP BY 
     Fruit 

컬럼의 변수 번호를 생성 동적 SQL을 필요로한다. 일반적으로 Excel을 사용하는 것이 더 쉽습니다. Excel에서는 말하자면 "피벗 (pivoting)"이라고합니다.

+0

이것은 좋은 생각 인 것 같지만, "고객"당 열 집합이 약 10 개있는 인스턴스가 걱정됩니다. 이것은 많은 긴 말로 이어질 것입니다. 다른 테이블에 고객이 고정되어 있으면 상황이 달라질까요? 나는 이것이 역동적 일 필요가 없다. 난 그냥 다른 테이블에있는 각 고객을 위해 실행 싶어요. – eek142

0

아마 같은 :

select * from table1 
pivot (sum(quantity) for customerid in ([1], [2], [3])) as pivotTable 

그러나 당신은 여전히 ​​여기에 고객 ID를 지정해야합니다.

관련 문제