私はSQL Serverの初心者です。SQL Server - テーブル結合時のグループ連結
select top 100 tpeople.firstname,tpeople.lastName,tpeople.city, STUFF((SELECT ', ' + cast(T2.education as varchar(50))
FROM tpeopleEducation T2
where tpeople.GUID = T2.PeopleGUID
FOR XML PATH('')
), 1,1, '') as education
from tpeople full join tpeopleEducation
on tpeople.GUID = tpeopleEducation.PeopleGUID
group by tpeople.GUID,tpeople.FirstName,tpeople.LastName,tpeople.City
出力::私はこの作業を取得しようとしています
firstname|lastname|city|education
Joe Doe NYC MIT,Harvard
John Smith LA NYU
私はこれが動作するように成功を持っています。
select top 100 tpeople.firstname,tpeople.lastName,tpeople.city
,STUFF((SELECT ', ' + cast(T2.attribute as varchar(50))
FROM tattributes T2
where tpeoplecluendex.AttributeGUID = T2.GUID
FOR XML PATH('')
), 1,1, '') as attributes
from tpeople
join tPeopleCluendex on tPeopleCluendex.CPSGUID = tpeople.GUID
join tAttributes on tAttributes.guid = tPeopleCluendex.AttributeGUID
group by tpeople.GUID,tpeople.FirstName,tpeople.LastName,tpeople.City,tAttributes.GUID,tPeopleCluendex.AttributeGUID
出力は次のとおりです:ここで私は一人あたりの属性(tAttributes)(tpeople)へのアクセスを得るためには、以下のように参加するために必要な
firstname|lastname|city|attributes
Joe Doe NYC test1
Joe Doe NYC test2
John Smith LA test1
は、なぜそれが好きではないされています
firstname|lastname|city|attributes
Joe Doe NYC test1,test2
John Smith LA test1
申し訳ありませんが、何かナンセンスを書きました。
正しい方法を指すSQL Server Gurusはありますか?
詳細情報を追加する必要がある場合はお知らせください。私は私の質問を更新します。
おかげで、
アップデート1:
select top 100 tpeople.GUID,tpeople.FirstName,tpeople.LastName,tpeople.City,tAttributes.GUID,tPeopleCluendex.AttributeGUID
,STUFF((SELECT ', ' + cast(T2.attribute as varchar(50))
FROM tattributes T2
where tpeoplecluendex.AttributeGUID = T2.GUID
FOR XML PATH('')
), 1,1, '') as attributes
from tpeople
join tPeopleCluendex on tPeopleCluendex.CPSGUID = tpeople.GUID
join tAttributes on tAttributes.guid = tPeopleCluendex.AttributeGUID
group by tpeople.GUID,tpeople.FirstName,tpeople.LastName,tpeople.City,tAttributes.GUID,tPeopleCluendex.AttributeGUID
は、出力は次のとおりです。
GUID FirstName LastName City GUID AttributeGUID attributes
------------------------------------ -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------ ------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1E92D80A-1859-4A2A-AE69-00003FF7190B Joe Doe 2972FC47-8511-4429-BBA3-00E515E3769D 2972FC47-8511-4429-BBA3-00E515E3769D test1
1E92D80A-1859-4A2A-AE69-00003FF7190B Joe Doe E317A420-1B25-4C6F-B8B3-164F185851E0 E317A420-1B25-4C6F-B8B3-164F185851E0 test2
アップデート2:
これはそれをしない:
select top 100 tpeople.FirstName,tpeople.LastName,tpeople.City,
STUFF((SELECT ', ' + cast(tAttributes.attribute as varchar(50))
FROM tAttributes, tpeoplecluendex
where tattributes.GUID = tPeopleCluendex.AttributeGUID and tPeopleCluendex.CPSGUID = tpeople.GUID
group by attribute FOR XML PATH('')), 1,1, '') as attributes
from tpeople
group by tpeople.GUID,FirstName,LastName,City
多分を連結しながら、 )。それはグループ内の競合の原因となっている他の列かもしれませんが、おそらくグループ化の問題です。 – ZLK
グループからtAttributes.GUID、tPeopleCluendex.AttributeGUIDを削除します。 –