您的位置:首页 > 数据库

SQL2000 和 SQL2005 下 行列转换 示例[转]

2009-02-21 09:00 375 查看
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

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: