|
近日有朋友询问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
|