日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态行转列小记

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态行转列小记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據庫環境: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 Code

2.固定列數行轉列實現

  在測試數據里,我們已經將數據分了固定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

總結

以上是生活随笔為你收集整理的动态行转列小记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。