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 中的 PIVOT 概念

SQL Server 2008 中的 PIVOT SQL 数据

我可以将 PIVOT 与 Microsoft SQL Server 中的内部联接结合起来吗?

SQL Server - 使用 PIVOT 查询比较 2 个表中的字段

如何在不使用pivot和unpivot的情况下在SQL Server中水平显示数据?