高手請進--以前有人問過,好像無解啊,有沒有好一點的解決方案...在線結貼...

gopark 2005-01-21 02:04:04
A表有列ID、char1
B表有列ID、char1、char2

B表是A表的从表,关系是1:n

现想select这样的内容,如何通过SQL来实现
A.ID,A.char1,B.char2

其中B.char2是多条记录叠加的内容。

譬如说:
A表中一条记录为
1 A1
2 A2
.
.
.
B表中有3条记录,分别
1 B11 B21
1 B12 B22
1 B13 B23
2 BB2 BA3
2 BB2 BB3

则我Select出来的内容应该是:
1 A1 B21,B22,B23
2 A2 BA3,BB3

其中我的逗号是另外加上去的。

请问如何写这样的语句?
...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Softlee81307 2005-01-21
  • 打赏
  • 举报
回复
上面建函數GetB 再在a表中調用
select *,dbo.GetB(id) from a 就得出結果
-----------------------
1 A1 B21,B22,B23
2 A2 BA3,BB3
Softlee81307 2005-01-21
  • 打赏
  • 举报
回复
Create Table A (id int,char1 varchar(10) )
Create Table b (id int,char1 varchar(10),char2 varchar(10) )
insert into A
select 1,'A1' UNION SELECT 2,'A2'
Insert into B
select 1,'B11','B21' UNION ALL Select 1,'B12','B22'
--------------------------------
Create Function GetB(@i int)
returns varchar(200)
as
begin
Declare @s varchar(200)
set @s=''
if exists(select * from B where id=@i)
begin
select @s=@s+char2+',' from B where id=@i
set @s=substring(@s,1,len(@s)-1)
end
return(@s)
end
------------------------End function ----------
select *,dbo.GetB(id) from a
xiajianfeng 2005-01-21
  • 打赏
  • 举报
回复
--try

CREATE FUNCTION GetChar2 (@ID VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @char2 AS VARCHAR(100)
SET @char2 = ''
SELECT @char2 = @char2 + ',' + RTRIM(char2) FROM B WHERE [ID] = @ID
RETURN(RIGHT(@char2, LEN(@char2) - 1))
END

--调用
SELECT *, dbo.GetChar2([ID]) AS char2 FROM A
icedut 2005-01-21
  • 打赏
  • 举报
回复
网上有好多把
都是用函数实现的

34,576

社区成员

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

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