SQL中的PIVOT查询

时间:2019-03-14 11:10:49

标签: sql sql-server tsql pivot

以下sql语句出现错误。错误读取:

  

FROM子句中的错误:“ SELECT”附近   无法解析查询

     

错误消息:关键字“ SELECT”附近的语法不正确。 ')'附近的语法不正确

关于为什么的任何想法?

"file_put_contents(/assets/uploads/15525609678807.svg): failed to open stream: No such file or directory",
"exception": "ErrorException",
"file": "/..../vendor/simplesoftwareio/simple-qrcode/src/SimpleSoftwareIO/QrCode/BaconQrCodeGenerator.php",
"line": 85, 

2 个答案:

答案 0 :(得分:0)

您必须为“最后一周”提供一些空值

  SELECT [Order], Dept, Area,'' as [Final Week], Total
     FROM dbo.DeptSummary10Weeks

只需尝试以下方法...

Declare @var nvarchar(max)
Select @var = coalesce(@var +',','') + cast(WeekNum as nvarchar(20)) from dbo.[10Weeks]    
FOR [Final Week] IN ('+@var+') AS PivotTable;   

答案 1 :(得分:0)

尝试使用显式WeekNum并在查询中添加右括号:

SELECT *
FROM (
  SELECT [Order], Dept, Area, [Final Week], Total
 FROM dbo.DeptSummary10Weeks
) AS SourceTable 
PIVOT (Sum(Total) FOR [Final Week] IN ([1], [2], [3], [4], [5], [6], [7])) AS PivotTable

更新:

尝试使用动态数据透视表:

declare @cols nvarchar(max);
declare @sql  nvarchar(max);
  select @cols = stuff((
    select distinct 
      ' , ' + CONCAT('[', CONVERT(varchar(10),  t.WeekNum), ']')
      from dbo.[10Weeks] t 
      order by 1
      for xml path (''), type).value('.','nvarchar(max)')
    ,1,2,'')

select  @sql = '
    SELECT *
    FROM (
         SELECT [Order], Dept, Area, [Final Week], Total
         FROM dbo.DeptSummary10Weeks
    ) AS SourceTable 
    PIVOT (Sum(Total) FOR [Final Week] IN (' + @cols + ') ) AS PivotTable'   

exec(@sql);