T-SQL - конкатенация строк - PullRequest
4 голосов
/ 30 июля 2010

Надеюсь, кто-то может помочь - я начинающий хакер SQL (и действительно очень плох в этом!)

У меня есть две таблицы на SQL Server 2005 ТАБЛИЦА 1 и ТАБЛИЦА 2:

TABLE1

COL1         COL2
1            10
2            20
3            30
4            10
4            20
5            20
6            30
7            10
7            20

TABLE2

COL1         COL2
10            A
20            B
30            C

COL2 в TABLE2 является символьным представлением числовых данных в COL2 TABLE1. Надеюсь это понятно?

Я разработал, как выбрать COL1 и COL2 из TABLE1 и объединить результаты, чтобы показать это:

COL1         COL2Concat
1            10
2            20
3            30
4            10, 20
5            20
6            30
7            10, 20, 30 

Используя это:

SELECT  COL1,
        STUFF(( SELECT  ',' + CAST(a.COL2 AS VARCHAR(255)) AS [text()]
                FROM    TABLE1 a
                WHERE   a.COL1 = b.COL1
                ORDER BY a.COL2
              FOR
                XML PATH('')
              ), 1, 1, '') AS COL2Concat
FROM    TABLE1 b
GROUP BY COL1
ORDER BY COL1

Но теперь я хотел бы попытаться получить тот же результат, за исключением использования данных в COL2 TABLE2 ... т.е. ::

COL1         COL2Concat
1            A
2            B
3            C
4            A, B
5            B
6            C
7            A, B, C 

Любые идеи - я застрял, если честно, пытаясь изменить запрос STUFF, но, похоже, он никогда не получался правильным ...

1 Ответ

6 голосов
/ 30 июля 2010

вы можете попробовать ...

SELECT  COL1,
        STUFF(( SELECT  ',' + CAST((SELECT COL2
                                        FROM TABLE2
                                        WHERE TABLE2.COL1 = a.COL1) AS VARCHAR(255)) AS [text()]
                FROM    TABLE1 a
                WHERE   a.COL1 = b.COL1
                ORDER BY a.COL2
              FOR
                XML PATH('')
              ), 1, 1, '') AS COL2Concat
FROM    TABLE1 b
GROUP BY COL1
ORDER BY COL1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...