use test go if object_id('test.dbo.tb') is not null drop table tb go -- 创建数据表 create table tb ( 姓名 varchar(8), 课程 varchar(10), 分数 int ) go --测试数据 insert into tb
select '张三','语文',80 union all
select '张三','数学',91 union all
select '张三','物理',75 union all
select '李四',77 union all
select '李四',80 union all
select '李四',75 go
?
--select * from tb
/*
姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94
*/
--代码实现
select 姓名, ? (case 课程 when '语文' then 分数 else 0 end) 语文, ? (case 课程 when '数学' then 分数 else 0 end) 数学, ? (case 课程 when '物理' then 分数 else 0 end) 物理 from tb
/*测试结果
姓名 语文 数学 物理 -------------------------- 张三??? 80??? 0??? 0 张三??? 0??? 91??? 0 张三??? 0??? 0??? 75 李四??? 77??? 0??? 0 李四??? 0??? 80??? 0 李四??? 0??? 0??? 75
(6 行受影响) */
--这里为了让每个人的数据单行显示,所以就以"姓名"分组统计, --可以使用max,也可以使用sum. 因为 0 在这里不影响统计结果
select 姓名, ? max(case 课程 when '语文' then 分数 else 0 end) 语文, ? max(case 课程 when '数学' then 分数 else 0 end) 数学, ? max(case 课程 when '物理' then 分数 else 0 end) 物理 from tb group by 姓名
-------------------------------------------------------------------------- select 姓名, ? sum(case 课程 when '语文' then 分数 else 0 end) 语文, ? sum(case 课程 when '数学' then 分数 else 0 end) 数学, ? sum(case 课程 when '物理' then 分数 else 0 end) 物理 from tb group by 姓名
?
--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程
?
declare @sql varchar(8000) set @sql = 'select 姓名 ' select @sql = @sql + ',max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']' from (select distinct 课程 from tb) as a set @sql = @sql + ' from tb group by 姓名' exec(@sql)
?
/*测试结果
姓名 语文 数学 物理 -------------------------- 李四??? 77??? 80??? 75 张三??? 80??? 91??? 75
(2 行受影响) */
?
?============================================================
declare @a table (id int,aa int) insert into @a select 1,1 union all select 1,0 union all select 2,0 union all select 3,1 union all select 3,0
select * from @a
select id, (CASE aa WHEN 1 THEN 1 ELSE 0 END) AS '1', (CASE aa WHEN 0 THEN 1 ELSE 0 END) AS '0' from @a
select id, SUM(CASE aa WHEN 1 THEN 1 ELSE 0 END) AS '1', SUM(CASE aa WHEN 0 THEN 1 ELSE 0 END) AS '0' from @a GROUP BY id
select id, max(CASE aa WHEN 1 THEN 1 ELSE 0 END) AS '1', max(CASE aa WHEN 0 THEN 1 ELSE 0 END) AS '0' from @a GROUP BY id
/* 1??? 1 1??? 0 2??? 0 2??? 0 3??? 1 3??? 1 3??? 0
1??? 1??? 0 1??? 0??? 1 2??? 0??? 1 2??? 0??? 1 3??? 1??? 0 3??? 1??? 0 3??? 0??? 1
1??? 1??? 1 2??? 0??? 2 3??? 2??? 1
1??? 1??? 1 2??? 0??? 1 3??? 1??? 1
*/
?
?
?
?
PS:
http://topic.csdn.net/u/20080920/15/61bf31bf-518c-41be-9e4a-b166c878dcaf.html?12972?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|