【问题标题】:PIVOT in SQL Server does not support Select statementSQL Server 中的 PIVOT 不支持 Select 语句
【发布时间】: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 语句
  • 那这个问题怎么解决呢?\

标签: sql sql-server tsql pivot


【解决方案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;
    ')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多