2

假设我有这个表名“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 上重复。

在我的工作中,我有一千行。我给你的例子非常细化。如果您需要更多信息,请告诉我。

4

3 回答 3

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
于 2013-06-27T04:54:28.357 回答
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;

看到这个 SQLFiddle

输出:

╔═════╦════════════╗
║ VAL ║     ID     ║
╠═════╬════════════╣
║ A   ║  1         ║
║ B   ║  2 , 7     ║
║ C   ║  3 , 4 , 5 ║
║ D   ║  6         ║
║ E   ║  8         ║
╚═════╩════════════╝
于 2013-06-27T03:45:48.720 回答
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
于 2013-06-27T03:45:27.170 回答