Сводная таблица SQL из динамических столбцов - PullRequest
0 голосов
/ 21 мая 2018

Я написал этот запрос для генерации сводной таблицы :

SELECT *
FROM (
    SELECT 
        ItemName_AR as [ItemName], 
        NetValue as Amount 
    FROM view_WH_CompanyTransactionDtl
) as s
PIVOT
(
    SUM(Amount)
    FOR [ItemName] IN (select ItemName_AR from WH_Items)
)AS pvt

, но он вызывает следующую ошибку в

Неправильный синтаксис рядом с ключевым словом 'select'.

на этот счет

FOR [ItemName] IN (select ItemName_AR from WH_Items)

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы не можете создать Dynamic SQL PIVOT таким образом.Вы можете попробовать что-то вроде этого ...

DECLARE @cols AS NVARCHAR(max) = Stuff((SELECT DISTINCT ',' + Quotename(ItemName_AR)
         FROM   WH_Items       
         FOR xml path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 1, ''); 

DECLARE @query AS NVARCHAR(max) =  'SELECT *
                                    FROM (
                                        SELECT 
                                            ItemName_AR as [ItemName], 
                                            NetValue as Amount 
                                        FROM view_WH_CompanyTransactionDtl
                                    ) as s
                                    PIVOT
                                    (
                                        SUM(Amount)
                                        FOR [ItemName] IN ('+ @cols +')
                                    )AS pvt';

EXECUTE(@query) 
0 голосов
/ 21 мая 2018

К сожалению, вы не можете использовать оператор select для предоставления разнообразных значений (не развернутая форма) = столбцы (развернутая форма).Вы можете использовать IN ([value1],[value2]) и т. Д. Или рассмотреть динамическое решение, вот ссылка: Имена столбцов динамической сводки SQL Server

...