Oracle Выбор четырех значений таблицы с разделенными запятыми значениями - PullRequest
0 голосов
/ 23 января 2019

У меня есть четыре таблицы с именами APP_PROFILE, ORIG, TERM и TERM_FAIL.Я хочу выбрать их значения и разделить их запятой.Кстати, я нахожу функцию listagg, но, насколько я понимаю, функция listagg не может работать с несколькими столбцами.

Мои таблицы выглядят следующим образом;

Table: APP_PROFILE
-----------------------
ID      NAME
--   ------------
1     profile_anil
2     profile_anil2

Table: ORIG
-----------------------
PROFILE_NAME      ORIG_ID
------------     ---------
profile_anil        3
profile_anil        4
profile_anil2       5
profile_anil2       6

Table: TERM
-----------------------
PROFILE_NAME      TERM_ID
------------     ---------
profile_anil        7
profile_anil        8
profile_anil2       9
profile_anil2       10

Table: TERM_FAIL
-----------------------
PROFILE_NAME      TERM_FAIL_ID
------------     -------------
profile_anil           11
profile_anil           12
profile_anil2          13
profile_anil2          14


Table: Result
-----------------------
PROFILE_NAME    ORIG_ID    TERM_ID    TERM_FAIL_ID
------------   ---------  ---------   -------------
profile_anil     3,4        7,8          11,12
profile_anil2    5,6        9,10         13,14

Ответы [ 2 ]

0 голосов
/ 23 января 2019
SELECT A.PROFILE_NAME, 
       LISTAGG(ORIG_ID,',') ORIG_ID, 
       LISTAGG(TERM_ID,',') TERM_ID, 
       LISTAGG(TERM_FAIL_ID,',') TERM_FAIL_ID
  FROM APP_PROFILE A, 
       ORIG B,
       TERM C,
       TERM_FAIL D
 WHERE A.PROFILE_NAME = B.PROFILE_NAME
   AND B.PROFILE_NAME = C.PROFILE_NAME
   AND C.PROFILE_NAME = D.PROFILE_NAME
 GROUP BY A.PROFILE_NAME
0 голосов
/ 23 января 2019

Вы можете использовать подзапросы:

select ap.*,
       (select listagg(orig_id, ',') within group (order by orig_id)
        from orig o
        where o.profile_name = ap.profile_name
       ) as origs,
       (select listagg(term_id, ',') within group (order by term_id)
        from term t
        where t.profile_name = ap.profile_name
       ) as terms,
       (select listagg(term_fail_id, ',') within group (order by term_fail_id)
        from term_fail tf
        where tf.profile_name = ap.profile_name
       ) as term_fails
from app_profile ap;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...