我得到了以下结果,我尝试 unpivot 将所有列移动到行并将 Quarter 中的值作为列,但无论我尝试多少,我都没有得到结果我在找。
我希望有人能指出我正确的方向,因为枢轴/逆枢轴让我很困惑。
当前数据:
Qarter Fatal incidents PSC Detentions Oil spill to Sea
Q1 2021 0 0 1
Q2 2021 1 1 1
Q3 2021 0 0 0
想要的结果是
Q1 2021 Q2 2021 Q3 2021
Fatal incidents 0 1 0
PSC Detentions 0 1 0
Oil spill to sea 1 1 0
答案 0 :(得分:0)
这回答了问题的原始版本。
你似乎想要所有的列,除了第二个,它变成了两个:
select t.quarter, t.psc_detentions, t.oil_spill_sea, . . .,
v.marks, v.q
from t cross apply
(values ('Fatal incidents', Fatal_incidents)
) v(q, marks);
请注意,对于这个简单的示例,您甚至不需要 apply
:
select t.quarter, t.psc_detentions, t.oil_spill_sea, . . .,
Fatal_incidents as marks, 'Fatal incidents' as q
from t;
不过,我猜您有多个要以这种方式处理的列,这就是我建议 apply
的原因。
答案 1 :(得分:0)
您可以尝试先对数据进行逆透视,然后再进行透视。
select ca.Type
, max(case when t.Qarter = 'Q1 2021' then ca.Value end) as [Q1 2021]
, max(case when t.Qarter = 'Q2 2021' then ca.Value end) as [Q2 2021]
, max(case when t.Qarter = 'Q3 2021' then ca.Value end) as [Q3 2021]
from dbo.Table1 as t
cross apply ( values ('Fatal incidents', [Fatal incidents])
, ('PSC Detentions', [PSC Detentions])
, ('Oil spill to Sea', [Oil spill to Sea])) as ca ([Type], [Value])
group by ca.Type
交叉应用将取消透视,聚合将为您透视数据。