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

求一条SQL语句,应该有点难度吧!
有表
a                         b
----------------
111                     m
111                     s
222                     i
222                     c
222                     b
现在我有写一个方法选出这样的数据,
111                     m-s
222                     i-c-b
就是我选出每一个a对应的b列都一一列出来,中间用横线隔开!
我本来想写个函数
select   @b=b   where   a= '111 '这样子的.但是好象只能返回一个数据吗?不知道怎么弄了,大家来帮帮我吧

------解决方案--------------------
create table string(a varchar(10), b varchar(10))
insert string select '111 ', 'm '
union all select '111 ', 's '
union all select '222 ', 'i '
union all select '222 ', 'c '
union all select '222 ', 'b '
go
create function getString(@s varchar(100))
returns varchar(100)
as
begin
declare @x varchar(100)
select @x=isnull(@x+ '- ', ' ')+b from string where a=@s
return @x
end

go
select a,dbo.getstring(a) from string group by a
------解决方案--------------------
a b
----------------
111 m
111 s
222 i
222 c
222 b
现在我有写一个方法选出这样的数据,
111 m-s
222 i-c-b

---------------------
用函數吧可以解決


create function aa(@id varchar(20))
returns varchar(1000)
as
begin
declare @str varchar(1000)
set @str= ' '
select @str=@str+ '- '+b from t where a=@id
return stuff(@str,1,1, ' ')

end

select a,dbo.aa(a) from t


------解决方案--------------------
create function aa(@id varchar(20))
returns varchar(1000)
as
begin
declare @str varchar(1000)
set @str= ' '
select @str=@str+ '- '+b from t where a=@id
return stuff(@str,1,1, ' ')

end

select a,dbo.aa(a) from t group by a

------解决方案--------------------
有表tb, 如下:
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc

需要得到结果:
id values
------ -----------
1 aa,bb
2 aaa,bbb,ccc

在SQL Server2000中我们处理的方式一般都是用自定义函数去处理:
举例如下:

create function dbo.f_str(@id int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r= ' '
select @r=@r+ ', '+value from tb where id=@id
return stuff(@r,1,1, ' ')
end
go

select id, values=dbo.f_str(id) from tb group by id


在SQL Server2005中,这种统计有了一种新的方法,直接使用语句调用sql2005的函数实现:
举例如下:

-- 示例数据
DECLARE @t TABLE(id int, value varchar(10))
Insert @t Select 1, 'aa '
UNION ALL Select 1, 'bb '
UNION ALL Select 2, 'aaa '
UNION ALL Select 2, 'bbb '
UNION ALL Select 2, 'ccc '

-- 查询处理