Как получить уникальные значения из предложения GROUP BY - PullRequest
0 голосов
/ 03 октября 2019

У меня есть таблица, в которой есть столбец уникального идентификатора, столбец реляционного ключа и столбец varchar.

|  Id  |  ForeignId  |  Fruits  | 
--------------------------------- 
|  1   |      1      |  Apple   |  
|  2   |      2      |  Apple   |  
|  3   |      3      |  Apple   |  
|  4   |      4      |  Banana  |  

Я хотел бы сгруппировать данные по столбцу Fruits, итакже возвращает список всех ключей ForeignId, которые находятся в этой конкретной группе. Вот так:

|  Fruit  |  ForeignKeys  |
---------------------------
|  Apple  |  1, 2, 3      |
|  Banana |  4            |

Пока у меня есть SQL, который я получаю мне сгруппированные значения Fruit, поскольку это тривиально. Но я не могу найти хорошее решение для извлечения значений ForeignKeyId, которые содержатся в группе.

SELECT Fruits FROM FruitTable

Я нашел функцию GROUP_CONCAT в MySql, которая, кажется, делает то, что мне нужно, но это не похожебыть доступным в SQL Server 2017.

Любая помощь по этому вопросу будет принята.

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Если вы используете SQL Server 2014 или более позднюю версию :

SELECT  Fruit       = Fruits 
    ,ForeignKeys    = STUFF(
                            (SELECT ',' + CAST(ForeignId AS VARCHAR(100))
                            FROM    FruitTable t2
                            WHERE   t1.Fruits = t2.Fruits 
                            FOR XML PATH ('')
                    )
                        ,1,
                1,
                ''
                ) 
FROM    FruitTable t1
GROUP   BY Fruits;

Если вы используете SQL Server 2016 или более позднюю версию, вы также можете написать этот более простой способ:

SELECT  Fruit = Fruits, ForeignKeys = STRING_AGG(ForeignId, ',')
FROM    FruitTable
GROUP   BY Fruits;
0 голосов
/ 03 октября 2019
SELECT fruits,  foreignkeys = STUFF(
             (SELECT ',' + foreignid
              FROM fruittable t1
              WHERE t1.id = t2.id
              FOR XML PATH (''))
             , 1, 1, '') 
from fruittable 
group by fruits

Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...