mysql数据库查询将两列数据一列去重,一列去重后合并

banerpang 2017-10-11 05:44:35
goodsno color
A 红,黄
B 红,蓝,绿
B 红,蓝
C 红,黄
C 红,绿
D 绿,黄,蓝
D 红,绿,蓝
D 红,黄,绿

查询结果
goodsno color
A 红,黄
B 红,蓝,绿
C 红,黄,绿
D 红,绿,黄,蓝
...全文
1547 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
年后入职国企 2019-07-11
  • 打赏
  • 举报
回复
流年真是骚 完美满足我的需求
  • 打赏
  • 举报
回复
不过人家是mysql 数据库~
  • 打赏
  • 举报
回复
楼上的思路 每行打散再合并 不错~
繁花尽流年 2017-10-13
  • 打赏
  • 举报
回复
引用 楼主 banerpang 的回复:
goodsno color A 红,黄 B 红,蓝,绿 B 红,蓝 C 红,黄 C 红,绿 D 绿,黄,蓝 D 红,绿,蓝 D 红,黄,绿 查询结果 goodsno color A 红,黄 B 红,蓝,绿 C 红,黄,绿 D 红,绿,黄,蓝
IF OBJECT_ID('tempdb..#tmp_1') IS NOT NULL DROP TABLE #tmp_1
CREATE TABLE #tmp_1 (goodsno VARCHAR(1),color VARCHAR(100))
INSERT INTO #tmp_1
select     'A','红,黄' union all
select     'B','红,蓝,绿'union all
select     'B','红,蓝' union all
select     'C','红,黄' union all
select     'C','红,绿' union all
select     'D','绿,黄,蓝' union all
select     'D','红,绿,蓝' union all
select     'D','红,黄,绿' 


;WITH aa AS (
	SELECT DISTINCT  a.goodsno,SUBSTRING(a.color, b.number, CHARINDEX(',', a.color+',', b.number)-b.number) AS color
	FROM   #tmp_1 a
		   JOIN MASTER.dbo.spt_values b
				ON CHARINDEX(',', ','+a.color, b.number) = b.number
	WHERE  b.[type]= 'P'
)


SELECT b.goodsno,LEFT(color,LEN(color)-1) as color FROM (
SELECT goodsno,
(SELECT color+',' FROM aa 
  WHERE goodsno=a.goodsno 
  FOR XML PATH('')) AS color
FROM aa a 
GROUP BY goodsno
) b
LZ试试
clark_kidd 2017-10-13
  • 打赏
  • 举报
回复
表设计的有问题,一条sql处理不了,要用程序或者存储过程+游标处理吧

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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