2012-02-07 11 views
1

tableスクリプトを実行複数回の制約に変数を使用して

いくつかの異なる「WHERE」句と同じクエリを実行している必要としない表2でCUST1、Cust2、Cust3列を移入する方法はありますか?

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 

を理想的には、私はすべてのユニークな顧客のCUSTOMER_ID列を別のテーブルを持っていると思いますし、私は各1を参照します:今、私はこれを行うに頼るだろう例えば

、上記のクエリでループします。 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では、「ピボット」と呼ばれています。

+0

これは良い考えですが、「顧客」ごとに約10セットの列が設定されることが心配です。これは長い長い記述につながります。固定台数の顧客を別のテーブルに置いていれば状況は変わりますか?私は本当にこれが動的である必要はありません。他のテーブルの顧客ごとに実行したいだけです。 – eek142

0

たぶんのようなもの:

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

しかし、あなたはまだここに顧客IDを指定する必要があります。

関連する問題