元素数超过 SQL 数据透视语句中允许的最大值
Posted
技术标签:
【中文标题】元素数超过 SQL 数据透视语句中允许的最大值【英文标题】:Number of elements exceeds the maximum allowed in SQL pivot statement 【发布时间】:2019-07-05 15:46:36 【问题描述】:我在尝试将日期值转换为“Mmm YY”格式然后将它们列为查询结果中的列时遇到问题。我找到了一个 pivot 命令的示例,因为我不理解它,所以我做错了,因为我收到错误消息:“选择列表中的元素数量超过了 4096 个元素的最大允许数量。”但我知道我正在查看的数据少于 4096 个月(5 年而不是 341 年)所以我知道错误是我的代码并怀疑它与我的分组有关。请帮忙!
我在 MSSMS 14.0.17289.0 中运行它,并尝试在它自己的嵌套选择语句中运行代码。它在将日期结果作为列返回时有效,因此我认为该位是正确的,但还不够了解,无法确定其余部分的问题。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME('PDate')
FROM [Live Company$G_L Entry] AS GLE
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = N'SELECT ' + @cols + N' from
(
GLE.[G_L Account No_]
,CASE WHEN GLE.[Global Dimension 1 Code] IS NOT NULL THEN GLE.[Global Dimension 1 Code] ELSE 00 END 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],GLE.[Pdate]
) x
pivot
(
max(value)
for PDate in (' + @cols + N')
) p '
exec sp_executesql @query;
我希望输出将 G_L Account、Branch、Amount、1 月 17 日、2 月 17 日、3 月 17 日、4 月 17 日...等列为包含内容的列标题。目前日期存在于标题“发布日期”下的列中。
【问题讨论】:
【参考方案1】:我看到几个错误。
首先,您没有收集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
变量的输出将使您看到导致错误的查询。下次您发布问题时,看到它会非常有帮助。
【讨论】:
以上是关于元素数超过 SQL 数据透视语句中允许的最大值的主要内容,如果未能解决你的问题,请参考以下文章