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

求一存储过程。。各位大哥帮忙顶一下。搞定就结贴。。顶就有分。。
有这样一个表wsp
id       yg_id       wt_id                 dn
1             1               1           '一级,二级 '
2             1               1           '二级 '
3             1               1           '二级,三级 '
4             1               2           'A '
5             1               2           'B '
6             1               2           'B,C '
...
...
我想用一个存储过程,通过输入参数yg_id和wt_id查出这样一个结果
yg_id         wt_id                             PS
1                     1             '一级   1   二级   3   三级   1 '
1                     2             'A     1     B     2     C     1 '
也就是相当于把所有yg_id和wt_id相同的dn统计出来。。
请牛人指点一二。谢谢了`

------解决方案--------------------
把所有符合条件的记录的dn拆分放到临时表中,按yg_id和wt_id分组,分别统计出dn中每个元素的个数连接到一起。
------解决方案--------------------
create table test(id int,yg_id int,wt_id int,dn varchar(20))
insert test select 1,1,1, '一级,二级 '
union all select 2,1,1, '二级 '
union all select 3,1,1, '二级,三级 '
union all select 4,1,2, 'A '
union all select 5,1,2, 'B '
union all select 6,1,2, 'B,C '
go

create proc prc
as
begin
select top 200 bh=identity(int,1,1) into # from syscolumns a,syscolumns b
select yg_id,wt_id,dn=substring(a.dn,b.bh,charindex( ', ',a.dn+ ', ',b.bh)-b.bh) from test a,# b
where b.bh <=len(a.dn)
and charindex( ', ', ', '+a.dn,b.bh)=b.bh
drop table #
end
go

create function dbo.fn_Merge(@wtid varchar(100))
returns varchar(8000)
as
begin
declare @name varchar(8000)
set @name= ' '
select @name=@name+ ' '+dn+ ' '+rtrim(cnt) from tmp2 where wt_id=@wtid
return stuff(@name,1,1, ' ')
end
go

create table tmp(yg_id int,wt_id int,dn varchar(20))
insert tmp exec prc

select * into tmp2 from
(
select yg_id,wt_id,dn,cnt=count(*) from tmp
group by yg_id,wt_id,dn
)a

select distinct yg_id,wt_id,PS=dbo.fn_Merge(wt_id) from
(
select yg_id,wt_id,dn,cnt=count(*) from tmp2
group by yg_id,wt_id,dn
)a

drop table test
drop table tmp,tmp2
drop proc prc
drop function fn_Merge


yg_id wt_id PS
----------- ----------- ----------------------
1 1 二级 3 三级 1 一级 1
1 2 A 1 B 2 C 1

(所影响的行数为 2 行)
好久没来了,出来冒个泡解决方案