Запускать скрипт несколько раз, используя переменную в ограничении - PullRequest
1 голос
/ 08 февраля 2012

table

Есть ли способ заполнить столбцы Cust1, Cust2, Cust3 в Таблице 2, который не предусматривает выполнение одного и того же запроса с несколькими различными предложениями "WHERE"?

Например, прямо сейчас я бы прибегнул к этому:

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 всех уникальных клиентов, а затем я бы сослался на каждую из них в цикле в приведенном выше запросе. SQL Server 2008.

Ответы [ 2 ]

4 голосов
/ 08 февраля 2012

Вы можете использовать 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 голосов
/ 08 февраля 2012

Может быть что-то вроде:

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

Но вы все равно должны указать здесь идентификаторы клиентов.

...