动态行转列小记
數(shù)據(jù)庫環(huán)境:SQL SERVER 2005
最近在整理數(shù)據(jù)時,要將查詢到的數(shù)據(jù)張貼到Excel中。在Excel中,要展示的行數(shù)是固定的,列數(shù)不固定,
一個一個數(shù)據(jù)的復制張貼太煩人。想了一個偷懶的方法,直接將查詢的數(shù)據(jù)進行行轉列,達到和Excel中的效果一致,
再整列復制到Excel中。
1.創(chuàng)建測試表,導入測試數(shù)據(jù)
/*從系統(tǒng)表sysobjects取出name字段的42行數(shù)據(jù),用作測試數(shù)據(jù)*/ WITH x0AS ( SELECT TOP 42nameFROM sysobjects),/*產生序號*/x1AS ( SELECT ROW_NUMBER() OVER ( ORDER BY name ) AS rn ,nameFROM x0),/*生成組號*/x2AS ( SELECT ( rn - 1 ) / 5 AS gp ,--不固定列數(shù)rn % 5 AS col ,--分5列 rn ,nameFROM x1)SELECT *INTO #tFROM x2 View Code2.固定列數(shù)行轉列實現(xiàn)
在測試數(shù)據(jù)里,我們已經將數(shù)據(jù)分了固定5個組。因此,可以通過行轉列將數(shù)據(jù)分成5列顯示。
SELECT * FROM ( SELECT gp ,col ,nameFROM #t) AS t1 PIVOT ( MAX(name) FOR col IN ( [0], [1], [2], [3], [4] ) ) AS t2 View Code看一下已知列數(shù)的分組結果
3.動態(tài)行轉列
現(xiàn)在我要把數(shù)據(jù)在5行中顯示,至于要分多少列,我不管。
“動態(tài)”即事先不知道要轉成多少列,所以,“動態(tài)行轉列”首要解決的問題是知道要轉多少列,解決了這個問題,
行轉列的實現(xiàn)直接套用2中的實現(xiàn)方法。
DECLARE @sql VARCHAR(MAX) DECLARE @sql_col VARCHAR(255) SELECT @sql_col = ISNULL(@sql_col + ',', '') + QUOTENAME([gp]) FROM #t GROUP BY gpSET @sql = 'SELECT *FROM ( SELECT gp ,col ,nameFROM #t) AS t1 PIVOT ( MAX(name) FOR gp IN (' + @sql_col + ') ) AS t2' EXEC (@sql) View Code動態(tài)行轉列的結果
在SQL SERVER 2005中實現(xiàn)動態(tài)行轉列,我能想到的辦法就是通過T-SQL來實現(xiàn)。
(本文完)
?
轉載于:https://www.cnblogs.com/boss-he/p/4740472.html
總結
- 上一篇: CPC客户端安装教程
- 下一篇: 点云数据处理方法