Я собрал запрос, чтобы перечислить кучу связанных данных. Ниже приведен упрощенный вариант запроса, а также примерный вывод.Oracle - как группировать по столбцу на основе другого столбца
SELECT DISTINCT
A.NAME AS APP_NAME,
REPLACE(H.ENVIRONMENT,',','/') AS HOST_ENVIRONMENT,
S.NAME AS SERVER_NAME,
(SELECT
LISTAGG(HS.NAME_1, '/') WITHIN GROUP(ORDER BY HS.NAME_1)
FROM
HOST_SERVER HS
WHERE
HS.NAME_2 = S.NAME
) AS HOST_NAMES,
CASE
WHEN S.LOCATION_ID IN (22,28,59) THEN 'ABC'
WHEN S.LOCATION_ID IN (6,8,9,11,53) THEN 'DBA'
WHEN S.LOCATION_ID IN (5,41,52,43,61) THEN 'ADFS'
WHEN S.LOCATION_ID IN (24,27,24,34,62,63,73) THEN 'ADR'
ELSE NULL
END AS HOST_LOCATION
FROM
APP A
FULL OUTER JOIN APP_HOST AH ON A.ID = AH.ID_1
FULL OUTER JOIN HOST H ON AH.ID_2 = H.ID
FULL OUTER JOIN HOST_SVR HS ON H.ID = HS.ID_1
FULL OUTER JOIN SVR S ON HS.ID_2 = S.ID
GROUP BY
A.NAME,
H.ENVIRONMENT,
S.NAME,
H.NAME,
S.LOCATION_ID,
S.LOCATION
ORDER BY
A.NAME
Пример вывода (не полный, некоторые несущественные столбцы опущены):
APP_NAME HOST_ENVIRONMENT SERVER_NAME HOST_NAMES
ABCD Production server1 host1/host2/host3
ABCD Production server2 host4/host5/host6
ABCD Development server1 host1/host2/host3
ABCD UBD server2 host4/host5/host6
То, что я хотел бы, чтобы выполнить это, по существу, группировать APP_NAME по окружающей среде. Мне нужна одна строка для Production и одна строка для чего-нибудь еще (просто называется Development - это хорошо). Ниже приведен пример того, что я хочу:
APP_NAME HOST_ENVIRONMENT SERVER_NAME HOST_NAMES
ABCD Production server1/server2 host1/host2/host3/host4/host5/host6
ABCD Development server1/server2 host1/host2/host3/host4/host5/host6
Как я могу сгруппировать эти приложения по окружающей среде? Очевидно, что это очень упрощенная версия, но я имею дело с тысячами строк. Спасибо за любую помощь!
Возможно, [это] (http://stackoverflow.com/questions/4686543/sql-to-concatenate-column-values-from-multiple-rows) может помочь – Lamak
вы можете показать нам свои данные из всех таблиц используется в вашем запросе? –