测试自己是不是高手

skyhh 2005-07-28 02:40:05
有两个表A,B

A表值为 : id(字段名)

A

B

C

D

B表值为: id char (字段名)

A 1

A a

B b

C a

C d

C e

现在要将显示结果如下所示:

Id 对应值

A 1,a

B b

C a,d,e

D

在SqlServer 内如何实现啊?
...全文
106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wscft 2005-07-28
  • 打赏
  • 举报
回复
--和 vivianfdlpw() 基本上相同, 必须定义一个函数代码如下:
create table A
(
id varchar(10)
)
create table B
(
id varchar(10),char varchar(10)
)
insert A select 'A' union all select 'B' union all select 'C' union all select 'D'
insert B
select 'A','1' union all
select 'A','a' union all
select 'B','b' union all
select 'C','a' union all
select 'C','d' union all
select 'C','e'

create function f_string(@arg varchar(10))
returns varchar(100)
begin
declare @rtn varchar(100)
set @rtn = ''
select @rtn = @rtn + ',' + b.char
from B
where B.ID = @arg
if len(@rtn) > 0
set @rtn = stuff(@rtn,1,1, '')
return @rtn
end
select distinct A.ID as ID, dbo.f_string(A.ID) as '对应值' from A,B where A.ID *= B.ID
drop table A
drop table B
drop function f_string

--结果
ID 对应值
A 1,a
B b
C a,d,e
D
officeMan 2005-07-28
  • 打赏
  • 举报
回复
学习
vivianfdlpw 2005-07-28
  • 打赏
  • 举报
回复
create table A
(
id varchar(10)
)
create table B
(
id varchar(10),[char] varchar(10)
)
insert A select 'A' union select 'B' union select 'C' union select 'D'
insert B
select 'A','1' union
select 'A','a' union
select 'B','b' union
select 'C','a' union
select 'C','d' union
select 'C','e'
go

if exists(select 1 from sysobjects where id=object_id('f_str') and xtype='FN')
drop function f_str
go
create function f_str(@ID varchar(10))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret + ',' + [char] from B where ID = @ID

set @ret = case when len(@ret)=0 then '' else stuff(@ret,1,1,'') end

return @ret
end
go

--测试
select A.id,[char]=dbo.f_str(A.id)
from A
left join B on A.id=B.id
group by A.id

--删除测试环境
drop table A,B

--结果
/*
id char
---------- ------------
A 1,a
B b
C a,d,e
D

(所影响的行数为 4 行)
*/
feitianbianfu16 2005-07-28
  • 打赏
  • 举报
回复
set @ret = case when len(@ret)=0 then '' else stuff(@ret,1,1,'')
后面少了一个end
skyhh 2005-07-28
  • 打赏
  • 举报
回复
服务器: 消息 156,级别 15,状态 1,过程 f_str,行 10
在关键字 'return' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,过程 f_str,行 13
在关键字 'select' 附近有语法错误。
子陌红尘 2005-07-28
  • 打赏
  • 举报
回复
create function f_str(@ID varchar(10))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret + ',' + [char] from B where ID = @ID

set @ret = case when len(@ret)=0 then '' else stuff(@ret,1,1,'')

return @ret
end

select id,dbo.f_str(id) from A group by id

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧