日期:2014-05-18  浏览次数:20561 次

询问一SQL语句的写法
写法如下:
select   a.trans_seq,   a.date_time,   b.asso_name   from   a,   b   where   a.trans_seq=b.trans_seq   and   a.date_time=b.date_datetime
结果如下:
trans_seq       date_time           asso_name
1123                 2007-05-31           USER,   M
1123                 2007-05-31           DEAN,   N

我想要的结果是这样的:
trans_seq       date_time           asso_name
1123                 2007-05-31     USER,   M     DEAN,   N  

就是两个asso_name合并成一行,怎么写啊,中间最好加个换行


------解决方案--------------------
写个函数:

create function fn_asso_name(
@trans_seq varchar(20),
@date_time datetime
)
returns varchar(300)
as
begin
declare @r varchar(300)
set @r = ' '
select @r=@r+ ' '+ b.asso_name
from a, b where a.trans_seq=b.trans_seq and a.date_time=b.date_datetime
and a.trans_seq=@trans_seq and a.date_time=@date_time
if @r <> ' '
set @r=stuff(@r,1,1, ' ')
return @r
end

go

--调用
select a.trans_seq, a.date_time,
。fn_asso_name(a.trans_seq, a.date_time)
from a, b where a.trans_seq=b.trans_seq and a.date_time=b.date_datetime
group by a.trans_seq, a.date_time


------解决方案--------------------
create function dbo.fun(@trans_seq varchar(100),@date_time datetime)
returns varchar(8000)
as
begin
declare @s varchar(8000)
set @s= ' '
select @s=@s+ ' '+asso_name from tmp where trans_seq=@trans_seq and date_time=@date_time
return stuff(@s,1,1, ' ')
end
go

select * into tmp from
(
select a.trans_seq, a.date_time, b.asso_name from a, b
where a.trans_seq=b.trans_seq and a.date_time=b.date_datetime
)m

select trans_seq,date_time,dbo.fun(trans_seq,date_time) from tmp
go

drop table tmp
drop function fun
------解决方案--------------------
如果不用函数合并字符串,有一种比较笨的方法 往后接表
select a.trans_seq, a.date_time, b1.asso_name +char(13)+ b2.asso_name as asso_name
from a , b b1,b b2
where a.trans_seq=b1.trans_seq and a.date_time=b1.date_datetime and a.trans_seq=b2.trans_seq and a.date_time=b2.date_datetime
and b1.asso_name <> b2.asso_name

这的每个trans_seq , date_time 有两个不同的asso_name,如果更多的话 就要再往后 加表
------解决方案--------------------
select a.trans_seq, a.date_time, b.asso_name+ ' '+b.asso_name from a, b where a.trans_seq=b.trans_seq and a.date_time=b.date_datetime

------解决方案--------------------
看看还有什么其它可利用的条件,比如同trans_seq时asso_name的个数有限制,或其中内容是固定的几种,获者。。。否则这样是达不到你的要求