สวัสดีคับ วันนี้ผมได้ลองทำโจทย์ในการเปลี่ยนข้อมูลจากแนวตั้งเป็นแนวนอน แบบระบุจำนวนคอลัมน์ที่ต้องการนะครับ
เรามาลองดูกันนะครับ
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