在SQL数据查询中,如何根据TraceID公共字段来合并其他的几个字段,并以逗号分隔 25
TraceIDBranchIDSystemID4001012311140010222111合并后:TraceIDBranchIDSystemID40010123,2221...
TraceID BranchID SystemID
40010 123 111
40010 222 111
合并后:
TraceID BranchID SystemID
40010 123,222 111 展开
40010 123 111
40010 222 111
合并后:
TraceID BranchID SystemID
40010 123,222 111 展开
4个回答
展开全部
分析函数+递归实现:
SELECT TraceID
,LTRIM(SYS_CONNECT_BY_PATH(BranchID,','),',') AS BranchID
,SystemID
FROM (SELECT TMP.*,
ROW_NUMBER() OVER(PARTITION BY TraceID ORDER BY 1) AS RN
,COUNT(1) OVER(PARTITION BY TraceID) AS CNT
FROM 表名)
WHERE CNT = RN
CONNECT BY PRIOR TraceID = TraceID
AND PRIOR RN + 1 = RN
START WITH RN = 1;
SELECT TraceID
,LTRIM(SYS_CONNECT_BY_PATH(BranchID,','),',') AS BranchID
,SystemID
FROM (SELECT TMP.*,
ROW_NUMBER() OVER(PARTITION BY TraceID ORDER BY 1) AS RN
,COUNT(1) OVER(PARTITION BY TraceID) AS CNT
FROM 表名)
WHERE CNT = RN
CONNECT BY PRIOR TraceID = TraceID
AND PRIOR RN + 1 = RN
START WITH RN = 1;
追问
你用的是oracle吧,SQL里根本就没有SYS_CONNECT_BY_PATH()这个函数啊,如果可以的话最好用存储过程!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是oracle可以通过简单的函数来实现,ms sql需要写个存储过程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个直接用sql可能不行,建议用存储过程,功能强大
追问
存储过程要怎么写呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
dfghjkyerdgttrtg
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询