不知道能不能实现这样的功能

deninghe 2007-06-12 11:39:42
select a.jq_id,b.jq_content,c.jd_name from hezuo_jq a,hulian_jq_info b,hulian_jq_jd c where a.jq_id = b.jq_id and a.jq_id = c.jq_id

查询到的结果是:
jq_id | jq_content | jd_name
98 | 寿州窑遗址 | 马祖庵
98 | 寿州窑遗址 | 神秘谷
98 | 寿州窑遗址 | 石牛古洞
98 | 寿州窑遗址 | 天柱峰
137 | 雾灵湖 | 化城寺
137 | 雾灵湖 | 甘露寺
.. | ... | ...

前台程序循环显示样式
景区id 景区 景点
98 寿州窑遗址 马祖庵 神秘谷 石牛古洞 天柱峰
--------------------------------------------
98 雾灵湖   化城寺 甘露寺
----------------------------------
上面的sql语句在程序中这样显示好像有点困难,我想能不能把同一个js_id下的多条jd_name记录在sql里转化到一个字段
例如这样:
jq_id | jq_content | jd_name
98 | 寿州窑遗址 | 马祖庵,神秘谷 ,石牛古洞,天柱峰
137 | 雾灵湖 | 化城寺,甘露寺

不知道能不能实现 如果可以的话请指教下
...全文
149 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
paoluo 2007-06-12
--創建環境
Create Table hezuo_jq(jq_id Int)
Create Table hulian_jq_info(jq_id Int, jq_content Nvarchar(30))
Create Table hulian_jq_jd(jq_id Int, jd_name Nvarchar(30))
--插入數據
Insert hezuo_jq Select 98
Union All Select 137

Insert hulian_jq_info Select 98, N'寿州窑遗址'
Union All Select 137, N'雾灵湖'

Insert hulian_jq_jd Select 98, N'马祖庵'
Union All Select 98, N'神秘谷'
Union All Select 98, N'石牛古洞'
Union All Select 98, N'天柱峰'
Union All Select 137, N'化城寺'
Union All Select 137, N'甘露寺'
GO
--創建函數
Create Function F_Get_jd_name(@jq_id Int)
Returns Nvarchar(4000)
As
Begin
Declare @S Nvarchar(4000)
Select @S = ''
Select @S = @S + ',' + jd_name From hulian_jq_jd Where jq_id = @jq_id
Select @S = Stuff(@S, 1, 1, '')
Return @S
End
GO
--測試
select a.jq_id,b.jq_content,dbo.F_Get_jd_name(a.jq_id) AS jd_name from hezuo_jq a,hulian_jq_info b where a.jq_id = b.jq_id
group by a.jq_id,b.jq_content
GO
--刪除測試環境
Drop Table hezuo_jq, hulian_jq_info, hulian_jq_jd
Drop Function F_Get_jd_name
--結果
/*
jq_id jq_content jd_name
98 寿州窑遗址 马祖庵,神秘谷,石牛古洞,天柱峰
137 雾灵湖 化城寺,甘露寺
*/
回复
paoluo 2007-06-12
有點問題,修改下

Create Function F_Get_jd_name(@jq_id Int)
Returns Nvarchar(4000)
As
Begin
Declare @S Nvarchar(4000)
Select @S = ''
Select @S = @S + ',' + jd_name From hulian_jq_jd Where jq_id = @jq_id
Select @S = Stuff(@S, 1, 1, '')
Return @S
End
GO
select a.jq_id,b.jq_content,dbo.F_Get_jd_name(a.jq_id) AS jd_name from hezuo_jq a,hulian_jq_info b where a.jq_id = b.jq_id
group by a.jq_id,b.jq_content
回复
bill024 2007-06-12
select distinct jq_id,jq_content,dbo.fn_Merge(jq_content) from test

98 寿州窑遗址 马祖庵,神秘谷,石牛古洞,天柱峰
137 雾灵湖 化城寺,甘露寺
回复
bill024 2007-06-12
create function dbo.fn_Merge(@jq_content varchar(1000))
returns varchar(8000)
as
begin
declare @name varchar(8000)
set @name=''
select @name=@name+','+jd_name from test where jq_content=@jq_content
return stuff(@name,1,1,'')
end
go

create table test(jq_id int,jq_content varchar(50),jd_name varchar(50))
insert test select 98,'寿州窑遗址','马祖庵'
union all select 98,'寿州窑遗址','神秘谷'
union all select 98,'寿州窑遗址','石牛古洞'
union all select 98,'寿州窑遗址','天柱峰'
union all select 137,'雾灵湖','化城寺'
union all select 137,'雾灵湖','甘露寺'

select distinct jq_content,dbo.fn_Merge(jq_content) from test
回复
paoluo 2007-06-12
Create Function F_Get_jd_name(@jq_id Int)
Returns Nvarchar(4000)
As
Begin
Declare @S Nvarchar(4000)
Select @S = ''
Select @S = @S + ',' + jd_name From hulian_jq_jd Where jq_id = @jq_id
Select @S = Stuff(@S, 1, 1, '')
Return @S
End
GO
select a.jq_id,b.jq_content,dbo.F_Get_jd_name(jq_id) AS jd_name from hezuo_jq a,hulian_jq_info b where a.jq_id = b.jq_id
group by a.jq_id,b.jq_content
回复
paoluo 2007-06-12
參考我回答的這個帖子

http://community.csdn.net/Expert/topic/5591/5591083.xml?temp=.2275354
回复
发动态
发帖子
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
社区公告
暂无公告