假设我有这个表名“Stuff”
╔════╦═════╗
║ ID ║ VAL ║
╠════╬═════╣
║ 1 ║ A ║
║ 2 ║ B ║
║ 3 ║ C ║
║ 4 ║ C ║
║ 5 ║ C ║
║ 6 ║ D ║
║ 7 ║ B ║
║ 8 ║ E ║
╚════╩═════╝
我想要一个查询,它可以给出输出字母重复的数字。您可以随意使用该表的任何列名。
基本上我想要的是“C”在3号,4号和5号上重新开始。“B”在2号和7号重复。
在我的工作中,我有数千行。我给你的例子非常精细。如果您需要更多信息,请告诉我。
答案 0 :(得分:3)
你可以尝试这个:
SELECT Val, Id =
STUFF((SELECT ' , ' + CAST( Id as varchar(20))
FROM Stuff b
WHERE b.Val = a.Val
FOR XML PATH('')), 1, 2, '')
FROM Stuff a
GROUP BY Val;
输出:
╔═════╦════════════╗
║ VAL ║ ID ║
╠═════╬════════════╣
║ A ║ 1 ║
║ B ║ 2 , 7 ║
║ C ║ 3 , 4 , 5 ║
║ D ║ 6 ║
║ E ║ 8 ║
╚═════╩════════════╝
答案 1 :(得分:3)
试试这个 -
DECLARE @temp TABLE (Id INT, Val CHAR(1))
INSERT INTO @temp (Id, Val)
VALUES
(1, 'A'),(2, 'B'),(3, 'C'),
(4, 'C'),(5, 'C'),(6, 'D'),
(7, 'B'),(8, 'E')
SELECT
Val
, RepeatValues = STUFF((
SELECT ', ' + CAST(ID AS VARCHAR(10))
FROM @temp a
WHERE a.Val = b.Val
FOR XML PATH ('')), 1, 2, '')
FROM @temp b
GROUP BY Val
答案 2 :(得分:2)
尝试这样......
SELECT
name
, STUFF((
SELECT ',' + CAST(ID AS VARCHAR(MAX))
FROM [stuff] a
WHERE a.name = b.name
FOR XML PATH ('')), 1, 1, '') AS RepeatIds
FROM [stuff] b
GROUP BY name