首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求一条SQL语句,应该有点难度吧!该怎么处理

2012-01-28 
求一条SQL语句,应该有点难度吧!有表ab----------------111m111s222i222c222b现在我有写一个方法选出这样的

求一条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 '

-- 查询处理


Select *
FROM(
Select DISTINCT
id
FROM @t
)A
OUTER APPLY(
Select [values]= STUFF(REPLACE(REPLACE(
(
Select value FROM @t N
Where id = A.id
FOR XML AUTO
), ' <N value= " ', ', '), ' "/> ', ' '), 1, 1, ' ')
)N

/*--结果
id values
----------- ----------------
1 aa,bb
2 aaa,bbb,ccc

(2 行受影响)
--*/


最近从CSDN上又发现了一种方法!
declare @a varchar(100)
select @a=coalesce(@a+ '/ ', ' ')+PNAME from HPINF where perid like '207% '
select @a

热点排行