我是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
我正试图让它发挥作用。在这里我需要像下面这样加入,以便每个人(tpeople)访问属性(tAttributes):
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
输出是:
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大师?
如果我要添加更多信息,请告诉我。我会更新我的问题。
谢谢,
更新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
答案 0 :(得分:0)
尝试按列打印所有组以查看差异 -
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
答案 1 :(得分:0)
连接时将GUID分组
select tpeople.GUID,tpeople.FirstName,tpeople.LastName,tpeople.City,
STUFF(( SELECT ', ' + cast(tAttributes.attribute as varchar(50))
FROM tAttributes, tpeoplecluendex
where AttributeGUID = GUID and tPeopleCluendex.CPSGUID = tpeople.GUID
group by attribute FOR XML PATH('')), 1,1, '') as attributes
from tpeople
group by tpeople.GUID,FirstName,LastName,City