sql合并某列字段--100分
一个sql的查询结果是:
select * from t1
查询结果是:
id AppD_Name userName
1 会签 xm
1 会签 cp
2 会签 aa
想用sql在此查询结果上查出:
id AppD_Name userName
1 会签 xm,cp
2 会签 aa
[解决办法]
CREATE TABLE #t2(
id int,
AppD_Name varchar(10),
userName varchar(10))
insert into #t2(id,AppD_Name) select distinct id,AppD_Name from t1
Declare @id int,@userName varchar(10),@uname varchar(10),@pd int,@c1 int,@c2 int,@s1 int,@s2 int
select @c1=count(id) from #t2
Declare rea CURSOR FOR
select id from #t2
open rea
set @s1=0
while @s1<@c1
begin
set @s1=@s1+1
fetch next from rea into @id
declare na CURSOR FOR
select userName from t1 where id=@id
open na
set @s2=0
set @pd=0
select @c2=count(id) from t1 where id=@id
while @s2<@c2
begin
set @s2=@s2+1
set @pd=@pd+1
fetch next from na into @uname
if (@pd=1)
set @userName=@uname
else
set @userName=@userName+','+@uname
end
set @s2=0
set @pd=0
update #t2 set userName=@userName where id=@id
CLOSE na
DEALLOCATE na
end
CLOSE rea
DEALLOCATE rea
GO
select * from #t2
drop table #t2
[解决办法]
其实这个需求就是对字符串的累加
sql语法里有sum(数值)了,sql的设计者却想不到提供一个sum(字符串)的功能
希望新版能知错就改
那个分页(top n skip m)功能也是,始终只有半截(只有top n没有skip m),搞得分页要大动干戈(多次使用top n来倒腾,或利用sql2005才支持的row_number()函数)
sql2012才支持完整的分页
[解决办法]
use xuanya
if object_id('csdn','u') is not null
drop table csdn --按你的要求创建一个表,表名和列名跟你说的有点不一样,内容相同
create table csdn(
id int,
app_name varchar(20),
user_name varchar(20))
insert into csdn values(1,'会签','xm')
insert into csdn values(1,'会签','cp')
insert into csdn values(2,'会签','aa')
go
select b.id,b.app_name,left(std,len(std)-1) from(
select id,app_name,(select user_name+','
from csdn where id=a.id and app_name=a.app_name
FOR XML PATH('')) as std
from csdn as a
group by id,app_name) as b
红色部分是通过FOR XML PATH 将id和app_name相同的部分的user_name显示成“xm,cp”的格式;
其余的部分不难,你应该能看懂了。
这个程序我试过了,是正确的