请教一个关于【子查询】作为一列的问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 15:50:38
两张表
表1:Table_A

SID Name
----------------
1 名字1
2 名字2
3 名字3
----------------

表2:Project_B

SID Account
----------------
1 帐号1
1 帐号2
1 帐号3
2 帐号1
2 帐号2
2 帐号3
3 帐号1
3 帐号2
3 帐号3
----------------

现在我想得到这样一个结果:

---------------------------
SID | Name | AccountList
| | 帐号1
1 | 名字1 | 帐号2
| | 帐号3
---------------------------
| | 帐号1
2 | 名字2 | 帐号2
| | 帐号3
---------------------------
| | 帐号1
3 | 名字3 | 帐号2
| | 帐号3
---------------------------

我用下面的语句执行时,提示子查询的返回值多与一个,即构造【AccountList】列时,每个SID行对应的AccountList列返回值是多个的,不允许这样做:

Select Table_A.SID,
Table_A.Name,
(Select Table_B.Account
Where Table_

--结果已完成,要利用到自定义函数,生成测试数据,运行在SQLSERVER上
CREATE TABLE TABLE_A (SID INT , Name CHAR(10))
INSERT INTO TABLE_A
SELECT 1, '名字1'
UNION ALL SELECT 2, '名字2'
UNION ALL SELECT 3,' 名字3'

CREATE TABLE TABLE_B (SID INT , Account CHAR(10))
INSERT INTO TABLE_B
SELECT 1, '帐号1'
UNION ALL SELECT 1, '帐号2'
UNION ALL SELECT 1,'帐号3'
UNION ALL SELECT 2,'帐号1'
UNION ALL SELECT 2,'帐号2'
UNION ALL SELECT 2,'帐号3'
UNION ALL SELECT 3,'帐号1'
UNION ALL SELECT 3,'帐号2'
UNION ALL SELECT 3,'帐号3'

--生成自定义函数
CREATE FUNCTION dbo.GetAllAccount(@SID INT) RETURNS varchar(8000)
AS
BEGIN
DECLARE @AllAccount varchar(8000)
SET @AllAccount=''
SELECT @AllAccount=@AllAccount+'/'+Account
FROM TABLE_B
WHERE SID=@SID

RETURN @AllAccount
EN