2016-10-19 2 views
1

Ich habe eine Tabelle wie untenSQL Server- über Zeile Sortieren von Werten

RowName   Col1   Col2   Col3   Col4 
-------------------------------------------------------------------------- 
Row1  2016-01-14 2016-01-08 2016-01-30 2016-01-01 
Row2  2016-01-02 2016-01-01 2016-01-18 2016-01-15 

Wie kann ich das Ergebnis zu erhalten, basierend auf dem Datum sortiert

RowName   Result 
-------------------------------------------------------------------------- 
Row1  Col4,Col2,Col1,Col4 
Row2  Col2,Col1,Col4,Col3 
+0

Welche Sie –

+0

verwenden DBMS erstellen vier Unterabfragen, eine pro Spalte und unterschiedliche Sortierung für jede Unterabfrage. –

Antwort

0
CREATE TABLE Test(Rowname VARCHAR(10), Col1 DATETIME, Col2 DATETIME, Col3 DATETIME, Col4 DATETIME); 

    INSERT INTO Test VALUES('Row1', '2016-01-14', '2016-01-08', '2016-01-30', '2016-01-01'); 
    INSERT INTO Test VALUES('Row2', '2016-01-02', '2016-01-01', '2016-01-18', '2016-01-15'); 

    SELECT RowName, 
     MAX((CASE WHEN RN = 1 THEN Colmn END)) + ',' + 
     MAX((CASE WHEN RN = 2 THEN Colmn END)) + ',' + 
     MAX((CASE WHEN RN = 3 THEN Colmn END)) + ',' + 
     MAX((CASE WHEN RN = 4 THEN Colmn END)) AS Result 
    FROM 
    (
     SELECT RowName,Colmn,ROW_NUMBER() OVER(PARTITION BY RowName ORDER BY RowName,Col) AS RN --INTO test_2 
     FROM 
      ( 
       (SELECT RowName,Col1 AS Col,'Col1' AS Colmn FROM Test) 
       UNION ALL 
       (SELECT RowName,Col2 AS Col,'Col2' AS Colmn FROM Test) 
       UNION ALL 
       (SELECT RowName,Col3 AS Col,'Col3' AS Colmn FROM Test) 
       UNION ALL 
       (SELECT RowName,Col4 AS Col,'Col4' AS Colmn FROM Test) 
      ) Z  
    ) P 
GROUP BY RowName; 
Verwandte Themen