SQL Server 中的 PIVOT 不支持 Select 语句
Posted
技术标签:
【中文标题】SQL Server 中的 PIVOT 不支持 Select 语句【英文标题】:PIVOT in SQL Server does not support Select statement 【发布时间】:2021-04-16 05:06:05 【问题描述】:我收到以下错误:
消息 156,第 15 级,状态 1,第 22 行 关键字“select”附近的语法不正确。
消息 102,第 15 级,状态 1,第 22 行 ')' 附近的语法不正确
运行此代码时:
Select *
from
(select
DWF_Week_No
,DWF_Fuel_Name
,DWF_T_Sale
from
QF_FDashboard_Week_Fuel
where
DWF_Month_Name = 'October'
and DWF_Location_Name = 'Fitzroy') t
pivot
(sum(DWF_T_Sale)
for DWF_Fuel_Name in (select distinct DWF_Fuel_Name from QF_FDashboard_Week_Fuel)
) as pivot_table;
【问题讨论】:
是的 - 这是真的 -PIVOT
不允许通过 SELECT
语句定义 for
值 - 它们必须明确列出。
解决这个问题的唯一方法是动态构建 SQL 语句
那这个问题怎么解决呢?\
这个答案将帮助***.com/a/18657579/1690217
【参考方案1】:
不能将 SELECT 放在 PIVOT 的 IN 中。您可以找到解决方法here。在你的情况下,它会是这样的:
DECLARE @col nvarchar(max) = (stuff( ( select distinct ',[' + Ltrim(rtrim(DWF_Fuel_Name)) +']' from QF_FDashboard_Week_Fuel FOR XML PATH('')),1,1,''))
EXEC('Select *
from
(select
DWF_Week_No
,DWF_Fuel_Name
,DWF_T_Sale
from
QF_FDashboard_Week_Fuel
where
DWF_Month_Name = ''October''
and DWF_Location_Name = ''Fitzroy'') t
pivot
(sum(DWF_T_Sale)
for DWF_Fuel_Name in ('+@col+')
) as pivot_table;
')
【讨论】:
以上是关于SQL Server 中的 PIVOT 不支持 Select 语句的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 中的 PIVOT / UNPIVOT
SQL Server 2008 中的 PIVOT SQL 数据
我可以将 PIVOT 与 Microsoft SQL Server 中的内部联接结合起来吗?