Chcę pokazać wszystkie trzy wiersze w pierwszym rzędzie, więc użyłem obrotu w zapytaniu ** PIC wyjściowe jest dołączone ** Wpisz opis obrazu tutaj

SELECT [Container Number],ReadTimee,Locationn,Trailer FROM             
(SELECT [Container Number],ReadTime,Location FROM #temp )as Tab1            
PIVOT            
(            
MAX(ReadTime) FOR Location IN (Trailer,ReadTimee,Locationn)) AS Tab2  

, ale przy użyciu powyższego zapytania zwraca wartość null . Pic wyjściowy jest pokazany poniżej Wprowadź opis obrazu tutaj

Chcę takim wyjściem

ReadTime                Location    Trailer Container Number           ReadTime                 Location    Trailer Container Number              ReadTime                  Location   Trailer  Container Number
2019-02-27 03:17:21.033 CUSTOM         1    ZIMU1374787,TRHU3437713   2019-02-27 06:10:35.470          ZERO        1    ZIMU1374787,TRHU3437713 2019-02-27 07:30:47.407             CFS            1    ZIMU1374787,TRHU3437713
2
Niranjan S 28 luty 2019, 12:19

1 odpowiedź

Możesz użyć metody MAX, aby uzyskać niezbędne kolumny:

SELECT
  MAX(CASE WHEN q.RowNumber = 1 THEN q.ReadTime ELSE NULL END) AS ReadTime
, MAX(CASE WHEN q.RowNumber = 1 THEN q.Location ELSE NULL END) AS Location
, MAX(CASE WHEN q.RowNumber = 1 THEN q.Trailer ELSE NULL END) AS Trailer
, MAX(CASE WHEN q.RowNumber = 1 THEN q.ContainerNumber ELSE NULL END) AS ContainerNumber
, MAX(CASE WHEN q.RowNumber = 2 THEN q.ReadTime ELSE NULL END) AS ReadTime
, MAX(CASE WHEN q.RowNumber = 2 THEN q.Location ELSE NULL END) AS Location
, MAX(CASE WHEN q.RowNumber = 2 THEN q.Trailer ELSE NULL END) AS Trailer
, MAX(CASE WHEN q.RowNumber = 2 THEN q.ContainerNumber ELSE NULL END) AS ContainerNumber
, MAX(CASE WHEN q.RowNumber = 3 THEN q.ReadTime ELSE NULL END) AS ReadTime
, MAX(CASE WHEN q.RowNumber = 3 THEN q.Location ELSE NULL END) AS Location
, MAX(CASE WHEN q.RowNumber = 3 THEN q.Trailer ELSE NULL END) AS Trailer
, MAX(CASE WHEN q.RowNumber = 3 THEN q.ContainerNumber ELSE NULL END) AS ContainerNumber
FROM
(
    SELECT 
    *
    , ROW_NUMBER() OVER(PARTITION BY T.Trailer ORDER BY T.Trailer) AS RowNumber
    FROM @Table AS T
)AS q

Pokażę przykład:

DECLARE @Table TABLE
(
    ReadTime DATETIME,
    [Location] VARCHAR(50),
    Trailer INT,
    ContainerNumber VARCHAR(50)
)

INSERT INTO @Table
(
    ReadTime,
    Location,
    Trailer,
    ContainerNumber
)
VALUES
  (   '2019-02-23 12:22:35.490', 'CUSTOM', 1, 'ZIMU1' )
, (   '2019-02-24 12:22:35.490', 'ZERO', 1, 'ZIMU2' )
, (   '2019-02-25 12:22:35.490', 'CFS', 1, 'ZIMU3')

I użyj powyższego zapytania, aby uzyskać pożądane wyjście:

enter image description here

2
StepUp 28 luty 2019, 10:34