连接另一个 table 的结果
Concatenate results from another table
我有两张桌子
TableA has three fields
Id | FieldA | SomethingElse
TableB has three fields as well
Id | FieldA_FK | FieldB
我们可以加入
的表格
TableA.FieldA = TableB.FieldA_FK
我想 select 这两个表上的值以检索以下数据集:
TableA.Id, TableA.FieldA, TableA.SomethingElse, [Concatenation of TableB.FieldB]
要检索 [TableB.FieldB 的串联],我知道我可以做到
declare @result varchar(500);
set @result = '';
select @result = COALESCE(@result + ',', '') + FieldB
from TableB b
join TableA a on a.FieldA = b.FieldA_FK
select @result
如何仅在一个结果行上进行串联才能获得上述结果?
提前致谢。
数据示例:
TableA
1 A something
2 B somethingElse
TableB
1 A Aa
2 A Ab
3 A Ac
4 B Ba
5 B Bb
我要取回
1 A something Aa, Ab, Ac
2 B somethingElse Ba, Bb
您可以使用 FOR XML PATH 命令:
SELECT
TableA.Id, TableA.FieldA, TableA.SomethingElse,
[Concatenation of TableB.FieldB] =
(STUFF((SELECT CAST(', ' + TableB.FieldB AS VARCHAR(MAX))
FROM TableB
WHERE (TableA.FieldA = TableB.FieldA_FK)
FOR XML PATH ('')), 1, 2, ''))
FROM TableA
这并不像它应该的那样明显,但您可以滥用 SQL的XML方法:
select a.ID, a.FieldA, a.FieldB
, stuff(
(select ', ' + TableB.FieldB
from TableB
inner join TableA on TableB.TableA_FK = TableA.ID
for xml path(''), type
).value('(./text())[1]', 'varchar(max)')
, 1,2,'')
from TableA a
看到这个fiddle:
http://sqlfiddle.com/#!3/0fdd52/5
我有两张桌子
TableA has three fields
Id | FieldA | SomethingElse
TableB has three fields as well
Id | FieldA_FK | FieldB
我们可以加入
的表格TableA.FieldA = TableB.FieldA_FK
我想 select 这两个表上的值以检索以下数据集:
TableA.Id, TableA.FieldA, TableA.SomethingElse, [Concatenation of TableB.FieldB]
要检索 [TableB.FieldB 的串联],我知道我可以做到
declare @result varchar(500);
set @result = '';
select @result = COALESCE(@result + ',', '') + FieldB
from TableB b
join TableA a on a.FieldA = b.FieldA_FK
select @result
如何仅在一个结果行上进行串联才能获得上述结果?
提前致谢。
数据示例:
TableA
1 A something
2 B somethingElse
TableB
1 A Aa
2 A Ab
3 A Ac
4 B Ba
5 B Bb
我要取回
1 A something Aa, Ab, Ac
2 B somethingElse Ba, Bb
您可以使用 FOR XML PATH 命令:
SELECT
TableA.Id, TableA.FieldA, TableA.SomethingElse,
[Concatenation of TableB.FieldB] =
(STUFF((SELECT CAST(', ' + TableB.FieldB AS VARCHAR(MAX))
FROM TableB
WHERE (TableA.FieldA = TableB.FieldA_FK)
FOR XML PATH ('')), 1, 2, ''))
FROM TableA
这并不像它应该的那样明显,但您可以滥用 SQL的XML方法:
select a.ID, a.FieldA, a.FieldB
, stuff(
(select ', ' + TableB.FieldB
from TableB
inner join TableA on TableB.TableA_FK = TableA.ID
for xml path(''), type
).value('(./text())[1]', 'varchar(max)')
, 1,2,'')
from TableA a
看到这个fiddle: http://sqlfiddle.com/#!3/0fdd52/5