博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

列值合并[转]

Posted on 2009-09-11 17:34  郭子  阅读(136)  评论(0编辑  收藏  举报
sqlserver2000中的表结构如下,各字段均为字符类型:
名称    类型  编号
广西    旱地  034/034
广西    旱地  039/033
广西    菜地  034/039
湖北    耕地  434/021
湖北    耕地  3224/021
北京    草地  4332/051
北京    水库  132/051
北京    水库  102/051
想实现如下查询结果:
名  称  类  型            编  号
广西    旱地,菜地  034/034,039/033,034/039
湖北    耕地        434/021,3224/021
北京    草地,水库  4332/051,132/051,102/051

-- =========================================
--
-----------t_mac 小编-------------
   ---希望有天成为大虾----
--
=========================================

IF OBJECT_ID('tb') IS NOT NULL
 
DROP TABLE tb
GO
CREATE TABLE tb(名称 varchar(10),类型 varchar(10),编号 varchar(20))
go
insert into tb
select
'广西',    '旱地''034/034' union all select
'广西'  ,  '旱地'  ,'039/033' union all select
'广西',    '菜地'  ,'034/039' union all select
'湖北'  ,  '耕地' , '434/021' union all select
'湖北'  ,  '耕地' , '3224/021' union all select
'北京'   , '草地' , '4332/05' union all select
'北京'   , '水库' , '132/051' union all select
'北京'   , '水库' , '102/051'

go
create function kkk1(@mingcheng varchar(10))
returns varchar(100)
as
begin
 
declare @s varchar(100)
 
set @s=''
 
select @s=@s+','+编号 from tb where 名称=@mingcheng
 
return stuff(@s,1,1,'')
end
create function kkk2(@mingcheng varchar(10))
returns varchar(100)
as
begin
 
declare @ss varchar(100)
 
set @ss=''
 
select @ss=@ss+','+类型 from (select distinct 名称,类型 from tb ) t
 
where 名称=@mingcheng  
 
group by 类型
 
return stuff(@ss,1,1,'')
end
go
select 名称,dbo.kkk2(名称) as 类型,dbo.kkk1(名称) as 编号
from tb
group by 名称
/*
北京    草地,水库    4332/05,132/051,102/051
广西    菜地,旱地    034/034,039/033,034/039
湖北    耕地    434/021,3224/021
*/

/*------------

-------
*/