Sql的查询显示问题,多条记录只显示一次,我用的是asp开发。有劳各位高手了!
例如
姓名 选修科目
小明 语文
小明 数学
小李 英语
小李 化学
显示的时候
小明 语文 数学 英语 (如果中间能有空格就更好)
小李 英语 化学
问题点数:100、回复次数:10Top
1 楼leeboyan(宝宝)回复于 2005-04-30 10:40:48 得分 20
给个例子:
要求
-----------------
原表:表1
xm zw
甲 校长
甲 主任
乙 副校长
乙 副主任
乙 办主任
=====================================
查询结果应该是:
xm zw
甲 校长,主任
乙 副校长,副主任,办主任
-----正式---------
--测试:
create table 表A(xm varchar(10),zw varchar(10))
insert into 表A select '甲','校长'
insert into 表A select '甲','主任'
insert into 表A select '乙','副校长'
insert into 表A select '乙','副主任'
insert into 表A select '乙','办主任'
insert into 表A select '丙','办主任'
insert into 表A select '定','办主任'
go
--1.创建一个合并的函数
create function fmerg(@id varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+zw from 表A where xm=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go
--2.调用自定义函数得到结果
select distinct xm,dbo.fmerg(xm) as zw from 表A
drop table 表A
Top
2 楼leeboyan(宝宝)回复于 2005-04-30 10:41:47 得分 10
把上函数中的',',变成' '即可Top
3 楼hipop(不怕慢,就怕站;站一站,二里半)回复于 2005-04-30 10:45:42 得分 10
学习!Top
4 楼xiaomeixiang(小山羊:))回复于 2005-04-30 10:46:39 得分 10
create table table1(姓名 varchar(50), 选修科目 varchar(50))
insert table1 values('小明', '语文')
insert table1 values('小明' , '数学')
insert table1 values('小李' , '英语')
insert table1 values('小李' ,'化学')
create table #table1(姓名 varchar(50), 选修科目 varchar(200))
insert into #table1 select 姓名, 选修科目 from table1 order by 姓名,选修科目
declare @姓名 varchar(50), @选修科目 varchar(200)
select @姓名='',@选修科目=''
update #table1 set @选修科目=case when 姓名=@姓名 then @选修科目+' '+选修科目 else 选修科目 end
,@姓名=姓名,选修科目=@选修科目
select 姓名,max(选修科目) from #table1 group by 姓名
drop table table1,#table1
Top
5 楼liuxiaoyi666(MSMVP 小猪妹荣誉马甲之八卦兔子)回复于 2005-04-30 10:50:32 得分 10
select * from table group by 姓名Top
6 楼xluzhong(Ralph)回复于 2005-04-30 11:32:27 得分 10
http://blog.csdn.net/xluzhong/articles/349046.aspxTop
7 楼zhuheyang()回复于 2005-04-30 11:50:57 得分 10
set @str=right(@str,len(@str)-1)
改成set @str=stuff(@str,1,1,'')Top
8 楼Hopewell_Go(好的在后頭﹗希望更好﹗﹗)回复于 2005-05-03 16:06:29 得分 10
--建立測試環境
create table studentQK(name varchar(50),course varchar(20))
insert into studentQK
select '小明', '语文' union all
select '小明', '数学' union all
select '小李', '英语' union all
select '小李', '化学,
--建立測試函數
create function f_catString(@name varchar(50)
returns nvarchar(1000)
as
begin
declare @s nvarchar(1000)
set @s=''
select @s=@s+' '+type from tb2 where id=@name
return(stuff(@s,1,1,''))
-- stuff('string',start,length,'string')刪除指定長度的字符并在指定的起始點插入另一組字符
end
go
--调用函数
select id,dbo.f_catString(name) as type from tb2 group by name
go
--删除测试环境
Drop Table tb2
Top
9 楼Hopewell_Go(好的在后頭﹗希望更好﹗﹗)回复于 2005-05-03 16:08:59 得分 10
將tb2改為studentQK
因為tb2是我以前測試的一個表
Top
10 楼raychiu(绝世好欣)回复于 2005-05-07 15:56:32 得分 0
补充一下我用的是Access数据库Top




