SQL: объединить все поля, соответствующие данному ключу? - PullRequest
0 голосов
/ 27 апреля 2011

Предположим, у меня есть запрос SQL, подобный этому:

    SELECT
    tickets.TicketNumber, history.remarks
    FROM
    AT_DeviceReplacement_Tickets tickets
    INNER JOIN
    AT_DeviceReplacement_Tickets_History history
    ON tickets.TicketNumber = history.TicketNumber;

В ответе я получаю такую ​​таблицу:

ticketNumber | remarks
-------------+------------
           1 | "Hello, there is a problem."
           1 | "Did you check the power cable?
           1 | "We plugged it in and now it works.  Thank you!"
           2 | "Hello, this is a new ticket."

Предположим, что я хочу написать запрос, который объединит замечания для каждого тикета и выдаст таблицу, подобную этой:

ticketNumber | remarks
-------------+------------
           1 | "Hello, there is a problem.Did you check the power cable?We plugged it in and now it works.  Thank you!"
           2 | "Hello, this is a new ticket."

Да, в реальном коде я, между прочим, отсортировал их по дате, но просто ради обсуждения, как бы я отредактировал приведенный выше запрос, чтобы получить результат, который я описал?

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Самое чистое решение этой проблемы зависит от БД.Ссылки Lentine показывают очень уродливые решения для Oracle и SQL Server и чистое решение для MySQL.Ответ в PostgreSQL также очень короткий и простой.

SELECT ticket_number, string_agg(remarks, ', ')
FROM 
AT_DeviceReplacement_Tickets tickets
INNER JOIN
AT_DeviceReplacement_Tickets_History history
ON tickets.Ticket_Number = history.Ticket_Number
GROUP BY tickets.ticket_number;

(Обратите внимание, что в вашем примере кода есть и ticket_number, и TicketNumber.)

Мне кажется, Oracle и SQL Server тоже1) иметь аналогичную агрегатную функцию или (2) иметь возможность определять ваши собственные агрегатные функции.[Для MySQL эквивалентный агрегат называется GROUP_CONCAT.] Какую БД вы используете?

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