PIVOT-запрос в SQL - PullRequest
       12

PIVOT-запрос в SQL

0 голосов
/ 14 марта 2019

Я получаю сообщение об ошибке с приведенным ниже SQL-оператором.Ошибка читает:

Ошибка в предложении FROM: рядом с «SELECT» Невозможно проанализировать запрос

Сообщение об ошибке: Неверный синтаксис рядом с ключевым словом «SELECT».Неверный синтаксис рядом с ')'

Есть идеи, почему?

SELECT *
FROM (
  SELECT [Order], Dept, Area, [Final Week], Total
 FROM dbo.DeptSummary10Weeks
) AS SourceTable 
PIVOT (Sum(Total) FOR [Final Week] IN (SELECT WeekNum FROM dbo.[10Weeks]) AS PivotTable;

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Попробуйте использовать явный 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);
0 голосов
/ 14 марта 2019

Вы должны указать пустое значение для заключительной недели

  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;   
...