SQL2000和2005下行列轉換例項

iSQlServer發表於2009-02-16

近日有朋友詢問SQL中行列轉換的問題,上網找了些提供給他,陸續還會有一些SQL方面的東西,大家一起共享一起進步一起發達,哈哈哈

1.建立 學生成績表
2.填充 部分資料
3.一般的直接查詢
4.Sql 2000 下 行列轉換
5.Sql 2005 下 PIVOT
------------
--建立 學生成績表
CREATE TABLE [StuSources] (
[StuID] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[StuName] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[KeCheng] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[ChengJi] [float] NOT NULL
) ON [PRIMARY]

--填充 部分資料
INSERT INTO StuSources
SELECT '001','張三','語文',81
UNION SELECT '001','張三','數學',71
UNION SELECT '001','張三','歷史',71
UNION SELECT '002','李四','語文',82
UNION SELECT '002','李四','數學',72
UNION SELECT '002','李四','歷史',72

-- 一般的直接查詢
SELECT * FROM StuSources
-- 結果
StuID StuName KeCheng ChengJi
001     張三     歷史     71.0
001     張三     數學     71.0
001     張三     語文     81.0
002     李四     歷史     72.0
002     李四     數學     72.0
002     李四     語文     82.0

-- Sql 2000 下 行列轉換
SELECT StuName,
'語文' = Sum(Case KeCheng WHEN '語文' THEN ChengJi ELSE 0 END ) ,
'數學' = Sum(Case KeCheng WHEN '數學' THEN ChengJi ELSE 0 END ),
'歷史' = Sum(Case KeCheng WHEN '歷史' THEN ChengJi ELSE 0 END )
FROM StuSources
GROUP BY StuName
-- 結果
StuName 語文 數學 歷史
李四     82.0 72.0 72.0
張三     81.0 71.0 71.0

-- Sql 2005 下 PIVOT
SELECT StuName,[語文] AS '語文',
[數學] AS '數學',[歷史] AS '歷史'
FROM StuSources s
PIVOT (SUM (ChengJi) FOR KeCheng IN ([語文],[數學],[歷史]) )AS pvt

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-553436/,如需轉載,請註明出處,否則將追究法律責任。

相關文章