ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL2000和2005下行列转换实例

SQL2000和2005下行列转换实例

原创 Linux操作系统 作者:iSQlServer 时间:2009-02-16 14:18:33 0 删除 编辑

近日有朋友询问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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-17

  • 博文量
    1319
  • 访问量
    2080091