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

これを試すことができます:

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 に答える