Как объединить данные из разных столбцов в SQL - PullRequest
0 голосов
/ 12 октября 2019

Может кто-нибудь объяснить мне, шаг за шагом, как я могу выполнять такие упражнения?

Допустим, у меня есть 2 таблицы

  • пользователей [id, user_name, book_id]
  • book [id, title, date]

Как я могу получить эту структуру:

[user_name, list_of_book_and_dates].

Что-то вроде

 John | book1 at 10.10.2019, book2 at 15.15.2019

1 Ответ

0 голосов
/ 12 октября 2019

Кажется, вам нужна функция LISTAGG -

SELECT U.user_name, LISTAGG(B.title || 'at' || B.date, ',') WITHIN GROUP (ORDER BY B.date)
FROM users U
JOIN book B ON U.book_id = B.id
GROUP BY U.user_name

Если вам строго необходимо использовать метод RECURSIVE CTE, вы можете использовать -

WITH TMP AS (SELECT U.user_name, B.title || 'at' || B.date book_detail, ROW_NUMBER() OVER (PARTITION BY user_name) RN
             FROM users U
             JOIN book B ON U.book_id = B.id),
 cte AS (SELECT user_name, book_detail, RN
         FROM TMP
         WHERE RN = 1
         UNION ALL
         SELECT T.user_name, C.book_detail || ', ' || T.book_detail, C.RN+1
         FROM TMP T
         JOIN cte C ON U.id = C.id
         WHERE T.user_name = C.user_name
         and C.RN + 1 = T.rn)
SELECT user_name, book_detail 
FROM cte C1
WHERE RN = (SELECT MAX(RN)
            FROM cte C2
            WHERE C1.user_name = C2.user_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...