Проблема сводной таблицы на sqlserver - данные разбиваются на несколько строк - PullRequest
0 голосов
/ 19 апреля 2019

Я выполнил Pivot для существующей таблицы, чтобы получить данные за неделю для заголовков столбцов, однако вместо того, чтобы объединять и предоставлять мне данные всего в 3 строки, он разбивался на несколько строк.enter image description here

Я хочу видеть данные только в 3 рядах, а не в повторениях.Пожалуйста, дайте мне знать, как с этим справиться.

Это запрос (выглядит немного грязно, потому что детали скрыты) enter image description here

Этоданные, которые я получаю с помощью Unpivot: enter image description here

Ожидаемый результат после Pivot: enter image description here

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Это кажется мне намного понятнее при повороте данных.Вам нужно только скопировать-вставить-заменить в одном месте, и вы определяете, как группировать столбцы.

SELECT Dept, Type,
    MIN(CASE WHEN Weekno = '2019W01' THEN [value] END),
    MIN(CASE WHEN Weekno = '2019W02' THEN [value] END),
    MIN(CASE WHEN Weekno = '2019W03' THEN [value] END),
    MIN(CASE WHEN Weekno = '2019W04' THEN [value] END),
    MIN(CASE WHEN Weekno = '2019W05' THEN [value] END),
    MIN(CASE WHEN Weekno = '2019W06' THEN [value] END)
FROM SomeTable
GROUP BY Dept, Type
ORDER BY Dept, Type;
1 голос
/ 19 апреля 2019

Я сделал все, что мог, основываясь на вашем отредактированном операторе SQL.Вам просто нужно сгруппировать по отделам и типам, а затем агрегировать сводные значения

select case when [REDACTED] END as Dept, Type, max([2019W01]) as [2019W01], max([2019W02]) as [2019W02], max([2019W03]) as [2019W03], max([2019W04]) as [2019W04]
from ( select 
   ltrim(rtrim(Plant)) as Plant
  ,cast(ltrim(rtrim(WeekNo)) as varchar) as WeekNo
  ,substring(cast(ltrim(rtrim(WeekNo)) as [REDACTED]
from [REDACTED] ) as a
unpivot 
(Value for Type in (A,B,C)) as sq
pivot (
  min(Value)
  for WeekNo in ([2019W01], [2019W02], [2019W03], [2019W04])
  ) as Pvt
group by Dept, Type
...