sql >> Database >  >> RDS >> Sqlserver

hoe loop je door een tabel om een ​​dataset te vinden?

U kunt dit eenvoudig doen door pivoting de gegevens. Het kan op twee manieren.

1.Gebruik Conditional Aggregate om de gegevens te draaien. Na pivoting je kunt datediff . vinden tussen verschillende stadia. Probeer dit.

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.gebruik Pivot om de gegevens te transponeren

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. Sorteer op laatste 2 karakters string

  2. Converteer Select Oracle Query naar update voor specifiek scenario

  3. Hoe kan ik mijn laatste verwijderopdracht in MySQL terugdraaien?

  4. MySQL retourneert waar/onwaar als col-waarde !=gespecificeerde waarde