通过数据透视运算符计算DateDiff挑战

时间:2019-01-18 15:39:41

标签: sql-server pivot-table

我正在尝试计算两个不同时间之间的持续时间。这是我的原始查询及其结果:

  SELECT 
      [DJ_NUMBER]
      ,[PROCESSING_ACTION]
      ,[TRANSACTION_QTY]
      ,[MES_MACHINE]
      ,[ACTION]
      ,[ACTION_TIME]
       ,[UNIQUE_ID]
   FROM [StagingDB].[dbo].[AFL_MES2O_Interface_Data_arch]
--   where ACTION in ('SetUp Start', 'Run Start','Run End')
    WHERE PROCESSING_ACTION = 'Job Status'
   Order by DJ_NUMBER asc, ACTION_TIME 
[![SourceData][1]][1]

SQL Code for the Source data

我尝试使用DateDiff函数,但出现转换问题。我的“运行结束”和“运行开始”是字符串格式: enter image description here

DATEDIFF(分钟,“运行结束”,“运行开始”) 我需要通过Pivot Operator获得以下信息: 持续时间1 =“运行开始”-“设置开始” 持续时间2 =“运行结束”-“运行开始”

最终输出应如下所示:

DJ_NUMBER持续时间1(分钟)持续时间2(分钟) 19483257 0 50 19483258 0 4.00

这是我的数据透视表运算符。这是我的代码:

       SELECT   DJ_NUMBER 
            , 'SetUp Start' as [SetUp]
            ,'Run Start' as [RunStart]
            ,'Run End' as [RunEnd]
--          ,DATEDIFF(Minute,'Run End','Run Start')
   FROM 
   (
        SELECT   DJ_NUMBER,ACTION,ACTION_TIME
        FROM [StagingDB].[dbo].[AFL_MES2O_Interface_Data_arch]
   )   As SourceData
   PIVOT
   (
     COUNT( ACTION_TIME)
     FOR  ACTION IN ([SetUp Start], [Run Start],[Run End])
   ) AS PIVOTTABLE
   Order by DJ_NUMBER asc

[![PivotOperaot Code][4]][4]

在计算数据透视表中的持续时间方面的任何帮助将不胜感激。

谢谢..

1 个答案:

答案 0 :(得分:0)

由于没有人回答我的问题,所以我能够自己弄清楚。这是任何有兴趣的人的解决方案:

SELECT 
     A.MES_MACHINE AS LineNo
    ,A.DJ_NUMBER
    ,A.ACTION as SetupStarted
    ,A.ACTION_TIME AS SetupStart
    ,B.ACTION as RunStarted
    ,B.ACTION_TIME AS UpTimeStart
    ,C.ACTION as RunEnded
    ,C.ACTION_TIME AS UpTimeEnd
    ,FORMAT(DATEDIFF(SECOND, A.ACTION_TIME, B.ACTION_TIME)/60.0,'##.##') AS Setup
    ,FORMAT(DATEDIFF(SECOND, B.ACTION_TIME, C.ACTION_TIME)/60.0, '##.##') AS UpTime

FROM [StagingDB]。[dbo]。[AFL_MES2O_Interface_Data_arch] A,[StagingDB]。[dbo]。[AFL_MES2O_Interface_Data_arch] B,[StagingDB]。[dbo]。[AFL_MES2O_Interface_Data_arch] C 哪里(B.DJ_NUMBER = A.DJ_NUMBER和B.ACTION_TIME> A.ACTION_TIME)和(C.DJ_NUMBER = B.DJ_NUMBER和C.ACTION_TIME> B.ACTION_TIME)