ThaiSQL.COM Wiki and Forum (My knowledge will be useful for you)

RSS


Quick Search
»
Advanced Search »

HostedBy
สวัสดีคับ วันนี้ผมได้ลองทำโจทย์ในการเปลี่ยนข้อมูลจากแนวตั้งเป็นแนวนอน แบบระบุจำนวนคอลัมน์ที่ต้องการนะครับ เรามาลองดูกันนะครับ

CREATE TABLE TestA
    (
      ColName VARCHAR(100) ,
      ColDate DATETIME
    )
GO

INSERT  INTO TestA
        ( ColName ,
          ColDate
        )
        SELECT  'aaaaaa' ,
                '2011/01/01 12:01:00'
        UNION ALL
        SELECT  'aaaaaa' ,
                '2011/01/01 17:50:12'
        UNION ALL
        SELECT  'aaaaaa' ,
                '2011/01/02 08:04:20'
        UNION ALL
        SELECT  'aaaaaa' ,
                '2011/01/02 11:55:12'
        UNION ALL
        SELECT  'aaaaaa' ,
                '2011/01/02 17:01:11'
GO

WITH    cte
AS ( SELECT   * ,
            CONVERT(VARCHAR(103), ColDate, 103) AS G1 ,
            DENSE_RANK() OVER ( PARTITION BY CONVERT(VARCHAR(10), ColDate, 103) ORDER BY ColDate ) AS G2
   FROM     TestA
 )
    SELECT  ColName 
			, G1 
            , MAX(CASE WHEN G2 = 1 THEN ColDate END) AS Time1
            , MAX(CASE WHEN G2 = 2 THEN ColDate END) AS Time2
            , MAX(CASE WHEN G2 = 3 THEN ColDate END) AS Time3
            , MAX(CASE WHEN G2 = 4 THEN ColDate END) AS Time4
            , MAX(CASE WHEN G2 = 5 THEN ColDate END) AS Time5
            , MAX(CASE WHEN G2 = 6 THEN ColDate END) AS Time6
            , MAX(CASE WHEN G2 = 7 THEN ColDate END) AS Time7
            , MAX(CASE WHEN G2 = 8 THEN ColDate END) AS Time8
    FROM    cte
    GROUP BY ColName ,
            G1
GO

DROP TABLE TestA 
GO