求帮忙

csdn_jiangl 2017-07-26 11:48:28
select '项目1','项目-1' union
select '项目1','项目-2' union
select '项目1','项目-3' union
select '项目2',''
--项目1,项目-1,项目-2,项目-3、项目2


有这样子的一组数据,需要得到“--项目1,项目-1,项目-2,项目-3、项目2”这样子的结果,求帮忙
...全文
369 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
leo_lesley 2017-07-26
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
    drop table #T
Go
Create table #T([col1] NVARCHAR(100),[col2] NVARCHAR(100))
Insert #T
select N'项目1',N'项目-1' union
select N'项目1',N'项目-2' union
select N'项目1',N'项目-3' union
select N'项目2',''
Go

SELECT STUFF(
(SELECT ',' + [col1] + CASE WHEN ISNULL([col2],'') = '' THEN '' ELSE ',' + [col2] END FROM (
SELECT [col1],STUFF((SELECT ','+[col2] FROM #T WHERE [col1] = T.[col1] FOR XML PATH('')),1,1,'')  [col2]
FROM #T T GROUP BY [col1]
) A FOR XML PATH('')) , 1,1,'')
二月十六 版主 2017-07-26
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col1] VARCHAR(100),[col2] VARCHAR(100))
Insert #T
select '项目1','项目-1' union
select '项目1','项目-2' union
select '项目1','项目-3' union
select '项目2',''
Go
--测试数据结束
;WITH cte AS (
Select *,ROW_NUMBER()OVER(ORDER BY (SELECT 1)) AS num from #T
)
SELECT '=='+STUFF((
SELECT (CASE WHEN EXISTS( SELECT b.col1
FROM cte b
WHERE a.num > b.num
AND (a.col1 = b.col1
OR a.col1 = b.col2)
) OR a.col1 ='' THEN '' ELSE ','+a.col1 END)+
(CASE WHEN EXISTS( SELECT c.col2
FROM cte c
WHERE a.num > c.num
AND( a.col2 = c.col1
OR a.col2 = c.col2)
) OR a.col2 ='' THEN '' ELSE ','+ a.col2 END)
FROM cte a
FOR XML PATH('')),1,1,'')


34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧