我有一个sql server(2018)查询,其中最后一列( SP.name
)可以有多个值,从而创建重复的行。我想把最后一列的结果放到1个字段中,用逗号分隔。
例如,如果下面查询的输出是(您将看到一个有野外考察,另一个有生日)。
John , Smith, x@Z.com,New York, NY, 11208 , Field Trip
John , Smith, x@Z.com,New York, NY, 11208 , Birthday Party
我希望它是这样的,实地考察和生日是在同一列。请注意,它可以是2个以上的结果,对于最后一列,有些查询最多会有5个结果。
John , Smith, x@Z.com,New York, NY, 11208 , "Field Trip,Birthday Party"
这是查询
SELECT DISTINCT
CC.FirstName, CC.LastName, CC.Email, Addresses.City, Addresses.State, Addresses.Postal, SP.Name
FROM CustContacts AS CC WITH (NoLock)
INNER JOIN Orders AS O WITH (Nolock) ON CC.CustContactID = O.ContactID
INNER JOIN Customers AS C WITH (Nolock) ON O.CustomerID = C.CustomerID
INNER JOIN SalesPrograms AS SP WITH (NoLock) ON O.SalesProgramID = SP.SalesProgramID
INNER JOIN OrderLines AS OL WITH (NoLock) ON O.OrderID = OL.OrderID
INNER JOIN RMEvents AS RME WITH (NoLock) ON OL.EventID = RME.EventID
INNER JOIN Addresses ON CC.AddressID = Addresses.AddressID
LEFT OUTER JOIN OEGroupVisits AS GV WITH (NoLock) ON O.GroupVisitID = GV.GroupVisitID
2条答案
按热度按时间9cbw7uwe1#
你似乎不需要这么多人。虽然它们可能用于过滤,但它们似乎没有什么作用。
因为sql server 2016不支持
STRING_AGG()
,您可以使用FOR XML
技巧:g6ll5ycj2#
您需要对以下表进行自联接:custcontacts、addresses和salesprPrograms中的某些或所有列:cc.firstname、cc.lastname、cc.email、addresses.city、addresses.state、addresses.posal、sp.name。接下来,您将需要连接这3个值:sp.name、'、'、sp1.name。这是假设您的self join中有salesprograms作为sp,salesprograms作为sp1。