2010-10-15 5 views
0

У меня есть следующий код в запросе T-Sql, я получаю следующее сообщение об ошибке, и я не совсем уверен, что вызывает ошибку. Я пишу оператор Pivot как динамический b/c. Я не знаю столбцов, которые будут возвращены.T-Sql - ошибка Pivot

Сообщение об ошибке: Msg 8156, Уровень 16, Состояние 1, Строка 9 Для заголовка «Сводная таблица» многократно указывается заголовок «Название - Комиссия за одобрение/END8».

В таблице #FeeTotals Temp имеет 3 колонки 1) dwordrkey (уникальный ключ идентификатор), 2) Desc_Cd: описание заряда, 3) Итого: деньги колонки

DECLARE @PivotColumnHeaders VARCHAR(MAX) 
    SELECT @PivotColumnHeaders = 
     COALESCE(
     @PivotColumnHeaders + ',[' + cast(Desc_Cd as varchar) + ']', 
     '[' + cast(Desc_cd as varchar)+ ']' 
    ) 
    From #FeeTotals 

    DECLARE @PivotTableSQL NVARCHAR(MAX) 

    SET @PivotTableSQL = N' 
    Select * 
    From #FeeTotals 
    PIVOT 
     (
    Sum(Total) 
    For Desc_Cd In (' + @PivotColumnHeaders + ') 
) 
    As PivotTable' 

    Execute(@PivotTableSQL) 
+2

Для отладки вы можете заменить EXECUTE на ПЕЧАТЬ. Затем вы можете просмотреть фактическое утверждение, которое не выполняется. – bobs

ответ

3

Вам нужно будет выбрать DISTINCT значения Desc_Cd Из #FeeTotals при создании заголовков. Он должен быть там дважды. Также используйте функцию QuoteName, чтобы ваш код имел дело с любыми значениями Desc_Cd, которые содержат символ ].

DECLARE @PivotColumnHeaders NVARCHAR(MAX) 

SELECT @PivotColumnHeaders = 
COALESCE(@PivotColumnHeaders + ',' + Desc_Cd, Desc_Cd) 
    FROM(
    SELECT DISTINCT QUOTENAME(Desc_Cd) AS Desc_Cd 
    FROM #FeeTotals 
    ) F 
Смежные вопросы