sql >> Databasteknik >  >> RDS >> Sqlserver

hur går man igenom en tabell för att hitta datauppsättningar?

Du kan göra detta enkelt genom att pivoting data. Det kan göras på två sätt.

1.Använd Conditional Aggregate för att pivotera data. Efter pivoting du kan hitta datediff mellan olika stadier. Prova detta.

SELECT orderid,Received,Keyed,Printed,Delivered,
       Datediff(minute, Received, Keyed)    TurnTime1,
       Datediff(minute, Keyed, Printed)     TurnTime2,
       Datediff(minute, Printed, Delivered) TurnTime3
FROM  (SELECT OrderID,
              Max(CASE WHEN ActivityID = 1 THEN ActivityDate END) Received,
              Max(CASE WHEN ActivityID = 2 THEN ActivityDate END) Keyed,
              Max(CASE WHEN ActivityID = 3 THEN ActivityDate END) Printed,
              Max(CASE WHEN ActivityID = 4 THEN ActivityDate END) Delivered
       FROM   Yourtable
       GROUP  BY OrderID)A 

2.använd Pivot för att överföra data

SELECT orderid,
       [1]                        AS Received,
       [2]                        AS Keyed,
       [3]                        AS Printed,
       [4]                        AS Delivered,
       Datediff(minute, [1], [2]) TurnTime1,
       Datediff(minute, [2], [3]) TurnTime2,
       Datediff(minute, [3], [4]) TurnTime3
FROM   Yourtable
       PIVOT (Max(ActivityDate)
             FOR ActivityID IN([1],[2],[3],[4]))piv 


  1. AT TIME ZONE – en ny favoritfunktion i SQL Server 2016

  2. UPDATE-sats för att omtilldela ett kolumnvärde enligt en numerisk formel

  3. Hur man snabbt väljer data från Oracle

  4. Hur optimerar jag MySQL:s frågor med konstanter?