比如有一个"人"表ID 姓名 年龄 性别 备注 (可能有更多的列)
1 张三 null 男 AAA
2 张三 19 null BBB
3 张三 20 null CCC要把这个表的数据,倒到另一个新表,而新表,屋的时候,只需要一行关于"张三"这个人的信息,原来的表里可能有多行关于"张三"的信息,现在只需要一行,但要把原来表中的数据提炼出来,如果有min(ID),得到的张三的年龄就是null,现在要:如果哪列,有数据,就把有的提取出来,如果重复,只要一个就行。但备注字段,要多行数据相加现在就想要这样的ID 姓名 年龄 性别 备注 (可能有更多的列)
1 张三 19 男 AAA+BBB+CCC或者ID 姓名 年龄 性别 备注 (可能有更多的列)
1 张三 20 男 AAA+BBB+CCC有没有什么好办法呀
1 张三 null 男 AAA
2 张三 19 null BBB
3 张三 20 null CCC要把这个表的数据,倒到另一个新表,而新表,屋的时候,只需要一行关于"张三"这个人的信息,原来的表里可能有多行关于"张三"的信息,现在只需要一行,但要把原来表中的数据提炼出来,如果有min(ID),得到的张三的年龄就是null,现在要:如果哪列,有数据,就把有的提取出来,如果重复,只要一个就行。但备注字段,要多行数据相加现在就想要这样的ID 姓名 年龄 性别 备注 (可能有更多的列)
1 张三 19 男 AAA+BBB+CCC或者ID 姓名 年龄 性别 备注 (可能有更多的列)
1 张三 20 男 AAA+BBB+CCC有没有什么好办法呀
解决方案 »
- sqlserver2005 远程链接sql2000的数据库报了如下错误,请高手支招!
- 一个简单sql,在Oracle版居然无人解答, 很郁闷!来者有分。
- 问下联合排序的语句
- ##############varchar换为数据类型为 int 的问题,在线等~~~
- 这个select语句应该怎么写啊,急
- 怎样用软件方式读取sql?
- 无盘站上客户端无法连接SQL2000?请高手们帮个忙!
- sql 怎么查询速度能更快一些!
- 在MS SQL server7中,可以update 一定数量的记录么?
- 用Delphi向SQL Server数据库里面写字符串的问题
- 关于数据库SQL Server 的运行问题
- 一个困惑很久的关于collation的问题
max(年龄) as 年龄,max(性别) as 性别,
(select ''+备注 from [人] where [姓名]=a.姓名 for xml path('')) as 备注
from [人] as a
group by 姓名
go
--> -->
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[姓名] nvarchar(2),[年龄] int,[性别] nvarchar(1),[备注] nvarchar(3))
Insert #T
select 1,N'张三',null,N'男',N'AAA' union all
select 2,N'张三',19,null,N'BBB' union all
select 3,N'张三',20,null,N'CCC'
Go
select 姓名,
max(年龄) as 年龄,max(性别) as 性别,
(select ''+备注 from #T where [姓名]=a.姓名 for xml path('')) as 备注
from #T as a
group by 姓名
/*
姓名 年龄 性别 备注
张三 20 男 AAABBBCCC
*/
CREATE table tb
(ID int,姓名 varchar(4),年龄 int,性别 varchar(2),备注 varchar(3))
insert into tb
select 1,'张三',null,'男','AAA' union all
select 2,'张三',19,null,'BBB' union all
select 3,'张三',20,null,'CCC'SELECT ID = MIN(ID) ,
姓名 ,
年龄 = MIN(年龄) ,
性别 = MIN(性别) ,
备注 = STUFF(( SELECT '+' + 备注
FROM tb t
WHERE 姓名 = tb.姓名
FOR
XML PATH('')
), 1, 1, '')
FROM tb
GROUP BY 姓名 DROP TABLE tb
/*
ID 姓名 年龄 性别 备注
----------- ---- ----------- ---- ---------------
1 张三 19 男 AAA+BBB+CCC
*/
max(年龄) as 年龄,max(性别) as 性别,
STUFF((select '+'+备注 from #T where [姓名]=a.姓名 for xml path('')) ,1,1,'')as 备注
from #T as a
group by 姓名
/*
姓名 年龄 性别 备注
张三 20 男 AAA+BBB+CCC
*/
姓名,
max(年龄) as 年龄,max(性别) as 性别,
stuff((select '+'+备注 from tb where [姓名]=t.姓名 for xml path('')) ,1,1,'') as 备注
from
tb t
group by
姓名