SQL Server-跨行值排序

时间:2016-10-19 16:57:48

标签: sql sql-server sorting

我有一张如下表格

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

如何根据日期排序

获得结果
RowName         Result
--------------------------------------------------------------------------
Row1        Col4,Col2,Col1,Col4
Row2        Col2,Col1,Col4,Col3

1 个答案:

答案 0 :(得分: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;