如何把列的内容distinct后,再横向表示?不要使用@sql变量
哪位大兄弟能用一条sql语句写出来,不要使用@sql变量。小弟拜一下!
-----------------------------
比如说数据库信息:
aaaa a1 007
aaaa a1 008
aaaa a2 007
aaaa a3 009
bbbb b1 007
bbbb b2 007
bbbb b2 008
-----------------------------
我希望得到的格式:
aaaa a1,a2,a3
bbbb b1,b2
-----------------------------
[解决办法]
不用变量是不能解决问题的
[解决办法]
SQL2000的,最好是function
[解决办法]
GO
create function fn_test(@c1 varchar(10))
returns varchar(50)
AS
begin
declare @str varchar(50)
set @str= ' '
select @str=@str+ ', '+c2 from (select distinct c1,c2 from T) a where c1=@c1
if len(@str)> 1
set @str=stuff(@str,1,1, ' ')
return @str
end
GO
select c1,dbo.fn_test(c1) as c2
from T
group by c1
[解决办法]
create function fmerg(@col varchar(20))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str= ' '
select @str=@str+ ', '+cast(col2 as varchar) from t where col1=@col
group by col2
set @str=right(@str,len(@str)-1)
return(@str)
End
go
create table t(col1 varchar(20),col2 varchar(10),col3 varchar(10))
insert t select 'aaaa ', 'a1 ', '007 '
union all select 'aaaa ', 'a1 ', '008 '
union all select 'aaaa ', 'a2 ', '007 '
union all select 'aaaa ', 'a3 ', '009 '
union all select 'bbbb ', 'b1 ', '007 '
union all select 'bbbb ', 'b2 ', '007 '
union all select 'bbbb ', 'b2 ', '008 '
go
select distinct col1,col2=dbo.fmerg(col1) from t
drop table t
drop function dbo.fmerg
结果:
aaaaa1,a2,a3
bbbbb1,b2
[解决办法]
create table t(col1 varchar(10), col2 varchar(5),col3 varchar(5))
insert into t select 'aaaa ', 'a1 ', '007 '
insert into t select 'aaaa ', 'a1 ', '008 '
insert into t select 'aaaa ', 'a2 ', '007 '
insert into t select 'aaaa ', 'a3 ', '009 '
insert into t select 'bbbb ', 'b1 ' , '007 '
insert into t select 'bbbb ', 'b2 ', '007 '
insert into t select 'bbbb ', 'b2 ', '008 '
declare @name varchar(10)
declare @s varchar(5)
--定义表变量,去掉col2重复值
declare @tb table(col1 varchar(10),col2 varchar(100))
insert into @tb select distinct col1,col2 from t
--定义表变量,保存游标结果
declare @tb1 table(col1 varchar(10),col2 varchar(100))
--定义游标
declare roy cursor for select col1,col2 from @tb
open roy
fetch next from roy into @name,@s
while (@@fetch_status=0)
begin
declare @v varchar(100)
set @v= ' '
select @v=@v+col2+ ', ' from @tb
where col1=@name
set @v=left(@v,len(@v)-1)
insert into @tb1 select @name,@v
fetch next from roy into @name,@s
end
close roy
deallocate roy
select distinct * from @tb1
col1 col2
---------- ----------
aaaa a1,a2,a3
bbbb b1,b2
(所影响的行数为 2 行)