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

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

*/

posted on 2009-02-21 09:00  自然之  阅读(140)  评论(0编辑  收藏  举报

导航