Tsql 连接来自另一个表的结果
我有两张桌子Tsql 连接来自另一个表的结果,tsql,concatenation,Tsql,Concatenation,我有两张桌子 TableA has three fields Id | FieldA | SomethingElse TableB has three fields as well Id | FieldA_FK | FieldB 我们可以把桌子放在桌子上 TableA.FieldA = TableB.FieldA_FK 我想在这两个表上选择值,以便检索以下数据集: TableA.Id, TableA.FieldA, TableA.SomethingElse, [Concatenation
TableA has three fields
Id | FieldA | SomethingElse
TableB has three fields as well
Id | FieldA_FK | FieldB
我们可以把桌子放在桌子上
TableA.FieldA = TableB.FieldA_FK
我想在这两个表上选择值,以便检索以下数据集:
TableA.Id, TableA.FieldA, TableA.SomethingElse, [Concatenation of TableB.FieldB]
要检索[表B.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
看这把小提琴:
因此
表B
对于给定的表A有多行。字段A
?绝对,每个字段a可能没有或有多行。为什么TableA
有主键Id
,而TableB
通过外键将TableB
引用到另一列FieldA
,而不是Id
列?这就是数据库的设计方式。我必须处理这个问题。@cjb110我添加了一些数据示例,希望能有所帮助。效果很好,谢谢你抽出时间,蒂姆,谢谢你们也这么做了。