Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Pivot/Unpivot_Sql_Sql Server_Tsql_Pivot_Unpivot - Fatal编程技术网

SQL Pivot/Unpivot

SQL Pivot/Unpivot,sql,sql-server,tsql,pivot,unpivot,Sql,Sql Server,Tsql,Pivot,Unpivot,我得到了下面的结果,我尝试取消Pivot以将所有列移动到行中,并将来自Quarter的值作为列,但无论我如何尝试,我都没有得到我想要的结果 我希望有人能给我指出正确的方向,因为支点/unpivot让我很困惑 当前数据: Qarter Fatal incidents PSC Detentions Oil spill to Sea Q1 2021 0 0 1 Q2 2021 1

我得到了下面的结果,我尝试取消Pivot以将所有列移动到行中,并将来自Quarter的值作为列,但无论我如何尝试,我都没有得到我想要的结果

我希望有人能给我指出正确的方向,因为支点/unpivot让我很困惑

当前数据:

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   

这回答了问题的原始版本

您似乎想要所有列,但第二列除外,它变成了两列:

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

您可以尝试先取消数据的Pivot,然后再透视

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

交叉应用将取消Pivot,聚合将为您旋转数据。

您希望的输出是什么?致命事件、PSC滞留、PSC检查、漏油、未遂事件、父系、CDI、LTI、RWC、MTC和工时列为Q1 2021、Q2 2021、Q3 2021和Q4 2021列。根据问题指南,请不要发布代码、数据和工时的图像,错误消息等-将文本复制或键入问题。请保留图像用于图表或演示渲染错误,这是无法通过文本准确描述的。很抱歉Dale发布了图像,我不太熟悉如何在此处以良好的方式显示数据,这就是为什么itI使用表格数据进行了更新。这仍然将所有列显示为列。我希望所有列都变成行,而行变成行columns@Pochen . . . 您的问题中有两个表格图像(我应该补充一点,不鼓励出于此类目的使用图像;请使用文本表格或DDL)。据推测,第一个是源数据,第二个是期望的结果。如果没有,你的问题不清楚,我可以投票决定结束。我已经用结构化的方式用数据更新了这篇文章。抱歉搞混了