Количество элементов превышает максимально допустимое в сводной инструкции SQL - PullRequest
0 голосов
/ 05 июля 2019

У меня возникла проблема при попытке преобразовать значения даты в формат «Ммм ГГ», а затем вывести их в виде столбцов в результатах моего запроса.Я нашел пример команды pivot и, поскольку я не понимаю ее, я сделал что-то не так, получив сообщение об ошибке: «Количество элементов в списке выбора превышает максимально допустимое количество 4096 элементов».но я знаю, что в данных, которые я просматриваю, меньше 4096 месяцев (5 лет, а не 341), поэтому я знаю, что ошибка - это мой код, и подозреваю, что это как-то связано с моей группировкой.Пожалуйста, помогите!

Я запускаю это в MSSMS 14.0.17289.0 и попытался запустить код во вложенных операторах выбора самостоятельно.Он работает при возврате результатов даты в виде столбца, поэтому я думаю, что этот бит верен, но не достаточно разбираюсь, чтобы определить проблему с остальными.Ветвь, Сумма, 17 января, 17 февраля, 17 марта, 17 апреля ... и т. Д. Как заголовки столбцов с содержимым внутри.На данный момент даты существуют в столбце под заголовком «Дата публикации».

1 Ответ

0 голосов
/ 05 июля 2019

Я вижу несколько ошибок.

Сначала вы не собираете имена столбцов в формате MMM yyy. На самом деле, когда вы написали это, вы объединяете последовательность строкового литерала PName.

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(FORMAT(GLE.[Posting Date],'MMM yy')) 
                FROM [Live Company$G_L Entry] AS GLE
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'');

Чтобы отладить это в будущем, вы можете использовать либо print @cols, либо select @cols, чтобы увидеть, выглядит ли он правильно.

У самого основного запроса были и другие проблемы.

set @query = N'SELECT [G_L Account No_], Branch' -- presumably you want to see these too
    + @cols + N' from
    (select -- <-- missing from your query
     GLE.[G_L Account No_]
    ,COALESCE(GLE.[Global Dimension 1 Code], 00) AS "Branch"
    ,CAST(SUM(GLE.[Amount]) AS DECIMAL(18,2)) AS Amount
    ,FORMAT(GLE.[Posting Date],'MMM yy') as PDate
            FROM [Live Company$G_L Entry] AS GLE
            GROUP BY GLE.[G_L Account No_],GLE.[Global Dimension 1 Code],
            FORMAT(GLE.[Posting Date],'MMM yy') -- <-- correct grouping expression
        ) x

Опять же, вывод вывода переменной @query позволит вам увидеть запрос, который вызывает ошибку. В следующий раз, когда вы отправите вопрос, было бы невероятно полезно это увидеть.

...