[英]Oracle - How to group by column based on another column
我整理了一个查询以列出一堆相关数据。 以下是查询的简化版本以及示例输出。
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分组。 我想要一条生产线,另一条用于其他生产线(只要叫做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
如何按环境将这些应用程序分组? 显然,这是一个非常简化的版本,但我要处理数千行。 谢谢你的帮助!
请查看以下查询,可能对您有用:
CREATE TABLE test(
APP_NAME VARCHAR2(100),
HOST_ENVIRONMENT VARCHAR2(100),
SERVER_NAME VARCHAR2(100),
HOST_NAMES VARCHAR2(100)
);
INSERT INTO test VALUES('ABCD','Production','server1','host1/host2/host3');
INSERT INTO test VALUES('ABCD','Production','server2','host4/host5/host6');
INSERT INTO test VALUES('ABCD','Development','server1','host1/host2/host3');
INSERT INTO test VALUES('ABCD','UBD','server2','host4/host5/host6');
/* CHECK THIS QUERY */
SELECT APP_NAME,HOST_ENVIRONMENT,
listagg(SERVER_NAME,'/' ) WITHIN GROUP (ORDER BY SERVER_NAME) AS SERVER_NAME,
listagg(HOST_NAMES,'/' ) WITHIN GROUP (ORDER BY HOST_NAMES) AS HOST_NAMES
FROM test
GROUP BY APP_NAME,HOST_ENVIRONMENT
尝试这个请看这个链接
注意 :这是用于分组和连接问题的解决方案,而不是问题的完整解决方案,您必须发布更多信息(例如,表,数据等)。
我知道这不是一个好的解决方案,但是您可以用查询替换我的表TEST,并且我认为您会拥有所需的东西。
您可以按多个列进行分组,例如,按app_name,host_environment分组,然后使用listagg聚合函数将server_names组合为单个字符串。 您的数据未显示您要如何处理app_name列中的多个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.