Объединение нескольких данных из строк / записей в одну строку с разделенными запятыми полями - PullRequest
5 голосов
/ 23 ноября 2011

Если бы я запросил нашу таблицу ORDERS, я мог бы ввести следующее:

 SELECT * FROM ORDERS
 WHERE ITEM_NAME = 'Fancy Pants'

В результатах этого запроса я мог бы получить следующее:

 ----------------------------------------------------------------------
 ORDER_ID       WAIST       First_Name       Email
 ----------------------------------------------------------------------
 001            32          Jason            j-diddy[at]some-thing.com
 005            28          Pip              pirrip[at]british-mail.com
 007            28          HAL9000          olhal[at]hot-mail.com

Теперь я также хочу получить информацию из другой таблицы:

ВЫБРАТЬ * ИЗ ПРОДУКТОВ WHERE ITEM_NAME = 'Необычные штаны'

 ------------------------------------------
 PRODUCT_ID     Product       Prod_Desc
 ------------------------------------------
 008            Fancy Pants   Really fancy.

Однако, в конце концов, я хочу сжать эти записи в одну строку с помощью SQL-запроса:

 -----------------------------------------------------------------------------
 PRODUCT       ORDER_Merged  First_Name_Merged  Email_Merged
 -----------------------------------------------------------------------------
 Fancy Pants   001,005,007   Jason,Pip,Hal9000  j-di[...].com, pirrip[...].com

Во всяком случае, так это будет выглядеть. Я не могу понять, как будет выглядеть этот запрос «слияния».

Мои поиски, к сожалению, продолжают приводить меня к результатам для PHP. Я нашел несколько результатов: слияние в строки CSV через SQL , но я не думаю, что они будут работать в моем сценарии.

Любое понимание, как всегда, будет высоко оценено.

UPDATE:

Ах, оказывается, функции STUFF и FOR XML были именно тем, что мне нужно . Спасибо всем !!

 Select
    A.name,
         stuff((
         select ',' + B.address
         from Addresses B
         WHERE A.id=B.name_id
         for xml path('')),1,1,'')
    From Names A

1 Ответ

1 голос
/ 03 декабря 2011

Это отличная статья о различных подходах к групповой конкатенации с аргументами "за" и "против" каждого.values-in-transact-sql /

Лично мне нравится подход Coalesce, который я демонстрирую здесь:

https://dba.stackexchange.com/a/2615/1607

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