sqlserver上的数据透视表问题 - 数据被拆分为多行

问题描述 投票:0回答:2

我在现有表上执行了一个Pivot,以获取Column Titles上的Week数据,但是不是整合并只给出3行数据,而是分成多行。 enter image description here

我希望看到的数据只有3行,而不是重复。请告诉我如何解决这个问题。

这是查询(看起来隐藏的细节有点凌乱)enter image description here

这是我从Unpivot得到的数据:enter image description here

Pivot之后的预期结果是:enter image description here

sql-server pivot-table
2个回答
1
投票

我已根据您编辑的SQL语句完成了我的工作。您只需要对Department和Type进行分组,然后聚合透视值

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

1
投票

在转动数据时,这对我来说似乎更加清晰。您只需要在一个位置进行复制 - 粘贴 - 替换,并定义对列进行分组的方式。

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;
© www.soinside.com 2019 - 2024. All rights reserved.