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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

经典行转列例子

發布時間:2025/3/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经典行转列例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*******************************************************************************
*課程表:Course
********************************************************************************/
CREATE TABLE #Course ( CourseName VARCHAR(10) );
INSERT? INTO #Course
??????? ( CourseName )
VALUES? ( '語文' ),
??????? ( '數學' ),
??????? ( '英語' )


SELECT? *
FROM??? #Course

/*******************************************************************************
*學生成績表:Score
********************************************************************************/
CREATE TABLE #Score
??? (
????? StudentName VARCHAR(10) ,
????? CourseName VARCHAR(10) ,
????? Score INT
??? );
INSERT? INTO #Score
??????? ( StudentName, CourseName, Score )
VALUES? ( '小紅', '語文', 76 ),
??????? ( '小紅', '數學', 85 ),
??????? ( '小紅', '英語', 55 ),
??????? ( '小李', '語文', 90 ),
??????? ( '小李', '英語', 74 ),
??????? ( '小林', '語文', 87 ),
??????? ( '小林', '數學', 90 )


SELECT? *
FROM??? #Score

/*******************************************************************************
*組織所有的課程
********************************************************************************/
DECLARE @CourseName VARCHAR(200) = ''
DECLARE @SelectSQL NVARCHAR(2000)
DECLARE @sql NVARCHAR(2000)

SELECT? @CourseName = @CourseName + '[' + CourseName + '],'
FROM??? #Course


SET @CourseName = LEFT(@CourseName, LEN(@CourseName) - 1)


/*******************************************************************************
*行轉列操作
********************************************************************************/
SET @SelectSQL = 'SELECT pvt.*
?FROM
?(
?? SELECT StudentName, CourseName, Score FROM #Score
?) p
?PIVOT( SUM(Score) For CourseName in ({0})) AS pvt'


SET @SelectSQL = REPLACE(@SelectSQL, '{0}', @CourseName)?????????????? ?
EXEC sp_executesql @SelectSQL

/*總分*/
SET @sql = ' SELECT m.* , n.total
FROM
(
?? ?SELECT * FROM
?? ??? ?(
?? ??? ??? ?SELECT * FROM #Score
?? ??? ?) p
?? ??? ?PIVOT (SUM(Score) FOR CourseName in ('+ @CourseName + ')) b
) m ,
(
SELECT StudentName,sum(Score) AS total from #Score
GROUP BY StudentName
)n
WHERE m.StudentName= n.StudentName'

EXEC sp_executesql @sql
/*******************************************************************************
*刪除臨時表
********************************************************************************/
DROP TABLE #Course

DROP TABLE #Score


如圖


總結

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

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