Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 server TSQL:将行转换为列_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

Sql server TSQL:将行转换为列

Sql server TSQL:将行转换为列,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我们正在跟踪时间,需要报告给定班次花费的时间。表如下所示,服务订单重复,但阶段不同 serviceorderid stageid recid datetimeexecuted WO-439660 Travelling 5639344479 2016-08-22 19:30:00.000 WO-439660 Started 5639344574 2016-08-22 20:30:00.000 WO-439660 Complete 5639345177

我们正在跟踪时间,需要报告给定班次花费的时间。表如下所示,服务订单重复,但阶段不同

serviceorderid stageid  recid       datetimeexecuted
WO-439660   Travelling  5639344479  2016-08-22 19:30:00.000
WO-439660   Started     5639344574  2016-08-22 20:30:00.000
WO-439660   Complete    5639345177  2016-08-22 22:30:00.000
WO-439660   Travelling  5639345178  2016-08-22 22:30:00.000
WO-439660   Suspended   5639349633  2016-08-22 23:00:00.000
WO-439660   Travelling  5639349917  2016-08-24 21:00:00.000
WO-439660   Started     5639349918  2016-08-24 21:00:00.000
WO-439660   Suspended   5639349920  2016-08-24 21:45:00.000
WO-439660   Travelling  5639349921  2016-08-24 21:45:00.000
WO-439660   Started     5639349923  2016-08-24 22:15:00.000
WO-439660   Complete    5639349925  2016-08-24 22:45:00.000
WO-439660   Travelling  5639349926  2016-08-24 22:45:00.000
WO-439660   Started     5639349927  2016-08-24 23:30:00.000
WO-439660   Complete    5639349928  2016-08-24 23:30:00.000
我需要旋转它,以便每个工单有一行,以staged=Traveling开头。像这样:

serviceorderid   travel      started     completed   susp
WO-439660        5639344479  5639344574  5639345177  
WO-439660        5639345178                          5639349633
WO-439660        5639349917  5639349918              5639349920
WO-439660        5639349921  5639349923  5639349925
等等

这必须写在一个视图中


换班总是从stageId=旅行开始,如果我可以将所有东西从一个旅行分组到另一个旅行,那么我应该能够旋转。我不能按日期分组,因为轮班可以跨天。在这里与TSQL抗争,非常感谢您的帮助。

类似的方法应该可以:

;WITH CTE AS (
   SELECT serviceorderid, stageid, recid, datetimeexecuted,
          COUNT(IIF(stageid='Travelling', 1, NULL)) 
          OVER 
          (PARTITION BY serviceorderid 
           ORDER BY datetimeexecuted, 
                    IIF(stageid = 'Started', 3,
                        IIF(stageid = 'Travelling', 2, 1))) AS grp
   FROM mytable
)
SELECT serviceorderid,
       MAX(CASE WHEN stageid='Travelling' THEN datetimeexecuted END) AS travel,
       MAX(CASE WHEN stageid='Started' THEN datetimeexecuted END) AS started,
       MAX(CASE WHEN stageid='Complete' THEN datetimeexecuted END) AS completed,
       MAX(CASE WHEN stageid='Suspended' THEN datetimeexecuted END) AS susp
FROM CTE
GROUP BY serviceorderid, grp

像这样的方法应该会奏效:

;WITH CTE AS (
   SELECT serviceorderid, stageid, recid, datetimeexecuted,
          COUNT(IIF(stageid='Travelling', 1, NULL)) 
          OVER 
          (PARTITION BY serviceorderid 
           ORDER BY datetimeexecuted, 
                    IIF(stageid = 'Started', 3,
                        IIF(stageid = 'Travelling', 2, 1))) AS grp
   FROM mytable
)
SELECT serviceorderid,
       MAX(CASE WHEN stageid='Travelling' THEN datetimeexecuted END) AS travel,
       MAX(CASE WHEN stageid='Started' THEN datetimeexecuted END) AS started,
       MAX(CASE WHEN stageid='Complete' THEN datetimeexecuted END) AS completed,
       MAX(CASE WHEN stageid='Suspended' THEN datetimeexecuted END) AS susp
FROM CTE
GROUP BY serviceorderid, grp

是否可以将样本数据包含为文本?将图像替换为文本数据是否可以将样本数据包含为文本?将图像替换为文本数据