-- 示例数据
DECLARE @t TABLE(编号 char(2), 值 varchar(10))
INSERT @t SELECT '01', 'a'
UNION ALL SELECT '01', 'b'
UNION ALL SELECT '01', 'c'
UNION ALL SELECT '02', 'a'
UNION ALL SELECT '02', 'b'
UNION ALL SELECT '02', 'c'
UNION ALL SELECT '03', 'a'
UNION ALL SELECT '03', 'b'
UNION ALL SELECT '03', 'd'
UNION ALL SELECT '04', 'a'
UNION ALL SELECT '04', 'b'
-- 查询处理
;WITH A
AS(
SELECT DATA.编号, A.值
FROM(
SELECT DISTINCT
编号
FROM @t
)DATA
OUTER APPLY(
SELECT 值 = STUFF(REPLACE(REPLACE(
(SELECT v = 值 FROM @t t WHERE 编号 = DATA.编号 FOR XML AUTO),
'<t v="', '、'), '"/>', ''), 1, 1, '')
)A
)
SELECT AA.编号, DATA.值
FROM(
SELECT 值 FROM A
GROUP BY 值
HAVING COUNT(*) > 1
)DATA
OUTER APPLY(
SELECT 编号 = STUFF(REPLACE(REPLACE(
(SELECT v = 编号 FROM A WHERE 值 = DATA.值 FOR XML AUTO),
'<A v="', '、'), '"/>', ''), 1, 1, '')
)AA
UNION ALL
SELECT * FROM @t
WHERE 编号 IN(
SELECT 编号 FROM A
WHERE NOT EXISTS(
SELECT * FROM A AA
WHERE A.值 = AA.值 AND A.编号 <> AA.编号)
)
/*--结果
编号 值
----------------- ---------
01、02 a、b、c
03 a
03 b
03 d
04 a
04 b