动态行转列小记
數據庫環境:SQL SERVER 2005
最近在整理數據時,要將查詢到的數據張貼到Excel中。在Excel中,要展示的行數是固定的,列數不固定,
一個一個數據的復制張貼太煩人。想了一個偷懶的方法,直接將查詢的數據進行行轉列,達到和Excel中的效果一致,
再整列復制到Excel中。
1.創建測試表,導入測試數據
/*從系統表sysobjects取出name字段的42行數據,用作測試數據*/ 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 ,--不固定列數rn % 5 AS col ,--分5列 rn ,nameFROM x1)SELECT *INTO #tFROM x2 View Code2.固定列數行轉列實現
在測試數據里,我們已經將數據分了固定5個組。因此,可以通過行轉列將數據分成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看一下已知列數的分組結果
3.動態行轉列
現在我要把數據在5行中顯示,至于要分多少列,我不管。
“動態”即事先不知道要轉成多少列,所以,“動態行轉列”首要解決的問題是知道要轉多少列,解決了這個問題,
行轉列的實現直接套用2中的實現方法。
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動態行轉列的結果
在SQL SERVER 2005中實現動態行轉列,我能想到的辦法就是通過T-SQL來實現。
(本文完)
?
轉載于:https://www.cnblogs.com/boss-he/p/4740472.html
總結
- 上一篇: CPC客户端安装教程
- 下一篇: 点云数据处理方法