FROM:http://topic.csdn.net/u/20110715/15/3c4b6792-9b8a-43f7-acfc-463a9da3fbff.html?78221
序号 姓名 单位 科目1 科目2 科目3
1 张三 湛江一小 合格 合格
2 张三 湛江第一小学 合格 合格
3 张三 茂名一小 合格
4 李四 清远二小 合格
5 李四 清远小学 合格
6 钱五 阳江小学 合格
7 钱五 汕头小学 合格
8 王六 广州小学 合格 合格
。
。
现在想输出一下效果(姓名一样且单位名前两字一样的将科目成绩合并,不一样的保持独立,合并的单位名可以取合并中的任意一个):
1. 张三 湛江一小 合格 合格 合格
2. 张三 茂名一小 合格
3. 李四 清远二小 合格 合格
4. 钱五 阳江小学 合格
5. 钱五 汕头小学 合格
6. 王六 广州小学 合格 合格
create table #tb(序号 int, 姓名 varchar(8),单位 varchar(20), 科目1 varchar(10), 科目2 varchar(10), 科目3 varchar(10))
insert #tb
select 1 ,'张三','湛江一小','合格','合格' ,null union all
select 2 ,'张三','湛江第一小学',null,'合格','合格' union all
select 3 ,'张三','茂名一小','合格' ,null,null union all
select 4 ,'李四','清远二小','合格' ,null,null union all
select 5 ,'李四','清远小学','合格', null,null union all
select 6 ,'钱五','阳江小学','合格' ,null,null union all
select 7 ,'钱五','汕头小学','合格' ,null,null union all
select 8 ,'王六','广州小学','合格','合格',null
select 序号=row_number() over (order by min(序号)),姓名,
min(单位)单位,max(科目1)科目1,max(科目2)科目2,max(科目3) 科目3
from #tb
group by 姓名,left(单位,2)
order by 序号
/*
序号 姓名 单位 科目1 科目2 科目3
-------------------- -------- ------------------------ ---------- ----------
1 张三 湛江第一小学 合格 合格 合格
2 张三 茂名一小 合格 NULL NULL
3 李四 清远二小 合格 NULL NULL
4 钱五 阳江小学 合格 NULL NULL
5 钱五 汕头小学 合格 NULL NULL
6 王六 广州小学 合格 合格 NULL
警告: 聚合或其他 SET 操作消除了空值。
(6 行受影响)
*/