Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

как да преминете през таблица, за да намерите набор от данни?

Можете да направите това лесно чрез pivoting данните. Може да се направи по два начина.

1. Използвайте Conditional Aggregate за завъртане на данните. След pivoting можете да намерите datediff между различни етапи. Опитайте това.

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.използвайте Pivot за транспониране на данните

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Общ преглед на оператора PRINT в SQL Server

  2. Atomic UPSERT в SQL Server 2005

  3. Преобразувайте CASE израз в SQL в извлечена колона в SSIS

  4. Как да използвате GOTO в SQL Server

  5. Проблем при свързване към sql сървър Неуспешно влизане. Входът е от ненадежден домейн и не може да се използва с Windows удостоверяване