我试图在1行而不是多行上获得结果。
我是SQL的新手,不确定要做什么。
SELECT
I.D1NAME,
S.MEMBER_NBR,
s.SHARE_NBR
FROM ID.MonthEnd_DL_Load_Dates EOM
JOIN SHARE S ON
EOM.month_end_date = S.DL_LOAD_DATE AND
COALESCE(S.CLOSED,0) = 0 AND
DATEDIFF(DAY,S.LAST_CUST_CONT_DATE,MONTH_END_DATE) > 365
JOIN MEMBERSHIPPARTICIPANT MP ON
S.DL_LOAD_DATE = MP.DL_LOAD_DATE AND
S.MEMBER_NBR = MP.MEMBER_NBR
JOIN INDIVIDUAL I ON
MP.DL_LOAD_DATE = I.DL_LOAD_DATE AND
MP.INDIVIDUAL_ID = I.INDIVIDUAL_ID
WHERE EOM.sequence = 1
我得到:
Rob 1234 1
Rob 1234 2
我想得到:
Rob 1234 1,2
答案 0 :(得分:0)
对于SQL SERVER 2008-2016
此变通办法使用XML PATH和STUFF来将单个变量的多行聚合为一行连接值。此解决方案模仿SQL SERVER 2017中的STRING_AGG。
我将演示使用AdventureWorks数据库和以下查询:
SELECT SOH.SalesOrderID
,STUFF
(
(
SELECT ', ' + CAST(SOD.ProductID AS VARCHAR(20)) AS [text()]
FROM AdventureWorks2016.Sales.SalesOrderDetail AS SOD
WHERE SOH.SalesOrderID = SOD.SalesOrderID
ORDER BY SOD.SalesOrderDetailID
FOR XML PATH('')
), 1, 1, NULL
) AS ProductIDs
FROM AdventureWorks2016.Sales.SalesOrderHeader AS SOH
示例输出:
SalesOrderID ProductIDs
51176 796, 872
51177 970, 708
51178 779, 871, 870
51179 795, 933, 922, 879
51180 793, 872, 870, 707, 714
51181 792, 922, 933, 707
XML PATH通过将值作为文本节点返回来将串联在一起。 STUFF消除了逗号开头。 SELECT语句将收集的文本节点连接在一起,并使用以下行来分隔结果:
SELECT ', ' + CAST(SOD.ProductID AS VARCHAR(20)) AS [text()]
PITFALL: 请确保将SHARE_NBR转换为VARCHAR(或NVARCHAR),因为XML PATH返回文本类型数据,因此它不适用于数字数据类型。