У меня есть запрос, где я пробую значения строки центра в имена столбцов, и в настоящее время я использую SUM(Case...) As 'ColumnName'
операторы, как так:
SELECT
SKU1,
SUM(Case When Sku2=157 Then Quantity Else 0 End) As '157',
SUM(Case When Sku2=158 Then Quantity Else 0 End) As '158',
SUM(Case When Sku2=167 Then Quantity Else 0 End) As '167'
FROM
OrderDetailDeliveryReview
Group By
OrderShipToID,
DeliveryDate,
SKU1
Вышеупомянутый запрос работает отлично и дает мне точно, в чем я нуждаюсь. Однако я выписываю SUM(Case...
операторы вручную на основе результатов следующего запроса:
Select Distinct Sku2 From OrderDetailDeliveryReview
Есть ли путь, с помощью T-SQL в хранимой процедуре, которую я могу динамично генерировать SUM(Case...
операторы от Select Distinct Sku2 From OrderDetailDeliveryReview
запросить и затем выполнить получающийся код SQL?
Отвечая на многие из этих вопросов за эти годы путем генерации динамического сводного SQL из метаданных, взгляните на следующие примеры:
SQL Dynamic Pivot - как упорядочить столбцы
Сводная таблица SQL Server 2005 по неизвестному количеству столбцов
В каком SQL-запросе или представлении будут отображаться «динамические столбцы»
Как выполнить поворот по атрибутам столбца XML в T-SQL
Как применить принцип DRY к операторам SQL, которые сводятся к месяцам
В вашем конкретном случае (с использованием сводной таблицы ANSI вместо функции PIVOT SQL Server 2005):
DECLARE @template AS varchar(max)
SET @template = 'SELECT
SKU1
{COLUMN_LIST}
FROM
OrderDetailDeliveryReview
Group By
OrderShipToID,
DeliveryDate,
SKU1
'
DECLARE @column_list AS varchar(max)
SELECT @column_list = COALESCE(@column_list, ',') + 'SUM(Case When Sku2=' + CONVERT(varchar, Sku2) + ' Then Quantity Else 0 End) As [' + CONVERT(varchar, Sku2) + '],'
FROM OrderDetailDeliveryReview
GROUP BY Sku2
ORDER BY Sku2
Set @column_list = Left(@column_list,Len(@column_list)-1)
SET @template = REPLACE(@template, '{COLUMN_LIST}', @column_list)
EXEC (@template)
Я знаю, что поисковая система SO не идеальна, но на ваш вопрос был дан ответ в Данные столбца PIVOT SQL Server .
См. Также Создание запросов кросс-таблиц и сводных таблиц в SQL .