Создать sql, который даст мне имя продукта, разделенное точкой с запятой? - PullRequest
5 голосов
/ 14 июля 2011

У меня есть таблица продуктов, как показано ниже. Я хотел бы создать sql, который даст мне имя продукта, разделенное точкой с запятой.

ProductName  AccountExpert
--------------------------
Tea          JohnSmith
Banana       GarySulvan
Water        JohnSmith
Candy        BobbySimmons
ConfecItem   BobbySimmons
Bread        JohnSmith
Soda         JohnSmith

Вывод Sql должен выглядеть следующим образом

AccountExpert  Products
-----------------------
JohnSmith      Tea; Water; Bread; Soda
GarySulvan     Banana
BobbySimmons   Candy; ConfecItem

Ответы [ 4 ]

1 голос
/ 14 июля 2011

В MS SQL вы можете использовать FOR XML, используя функцию Stuff для удаления лишнего разделителя.К сожалению, нет групповой функции concat, как в MySQL.

CREATE TABLE #ProductExpert (ProductName nvarchar(20), AccountExpert nvarchar(20))

INSERT INTO #ProductExpert(ProductName, AccountExpert) SELECT
'Tea',          'JohnSmith'     UNION ALL SELECT
'Banana',       'GarySulvan'    UNION ALL SELECT
'Water',        'JohnSmith'     UNION ALL SELECT
'Candy',        'BobbySimmons'  UNION ALL SELECT
'ConfecItem',   'BobbySimmons'  UNION ALL SELECT
'Bread',        'JohnSmith'     UNION ALL SELECT
'Soda',         'JohnSmith'

SELECT DISTINCT
    ae.AccountExpert,
    Stuff((
        SELECT
             '; ' + p.ProductName
        FROM
            #ProductExpert AS p
        WHERE
            ae.AccountExpert = p.AccountExpert
        ORDER BY
            p.ProductName
        FOR XML PATH('')
    ), 1, 2, '') AS Products
FROM
    #ProductExpert AS ae
ORDER BY
    ae.AccountExpert

DROP TABLE #ProductExpert
1 голос
/ 14 июля 2011

Вы можете попробовать некоторые из этих идей:

Имитация функции MySQL group_concat в Microsoft SQL Server 2005?

Суть в том, что в SQL-Server 2008 не существует действительно элегантного способа сделать это

1 голос
/ 14 июля 2011

если вы используете MySQL, тогда используйте GROUPing и GROUP_CONCAT:

SELECT AccountExpert, GROUP_CONCAT(ProductName SEPARATOR '; ')
FROM ProductExperts
GROUP BY AccountExpert
0 голосов
/ 14 июля 2011

Пожалуйста, посмотрите на http://blog.namwarrizvi.com/?p=140

Это то, что вы хотите сделать, но с , вместо

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