我有两个表,ROLE和ROLE_DESC。
ROLE看起来像这样。
PS_ROLE_SEQ NUMBER,
PS_SEQ NUMBER,
ROLE_TYPE VARCHAR2(2 CHAR),
SOURCE VARCHAR2(128 CHAR)
ROLE_DESC看起来像这样。
ROLE_TYPE VARCHAR2(2 CHAR),
ROLE_NAME VARCHAR2(16 CHAR)
如您所料,ROLE的ROLE_TYPE和ROLE_DESC的ROLE_TYPE互相引用。 ROLE_DESC中有三个实体,如下所示。
ROLE_TYPE ROLE_NAME
A Account
M Manager
S Sales
我想使用where子句为特定的PS_SEQ创建此字符串。
(Account + ":" + ROLE.SOURCE + "|" + Manager + ":" + ROLE.SOURCE + "|" + Sales + ":" + ROLE.SOURCE)
有时,ROLE表没有完整的ROLE_TYPE,例如,它只有Account和Manager。 在这种情况下,Sales的ROLE.SOURCE变为“”。 并且,ROLE_DESC是动态的,可以更改实体数量。
有什么方法可以轻易地查询这个吗?
答案 0 :(得分:0)
你可以试试这个:
select ROLE_DESC.ROLE_TYPE, ROLE_DESC.ROLE_NAME, ROLE.SOURCE
FROM ROLE_DESC
LEFT OUTER JOIN ROLE
ON (ROLE_DESC.role_type=ROLE.role_type and ROLE.PS_SEQ = 111)
答案 1 :(得分:0)
SELECT LISTAGG (role_name || ':' || source, '|') WITHIN GROUP (ORDER BY role_name)
FROM (SELECT ROLE_DESC.ROLE_TYPE, ROLE_DESC.ROLE_NAME, ROLE.SOURCE
FROM ROLE_DESC
LEFT OUTER JOIN ROLE
ON ROLE_DESC.role_type = ROLE.role_type AND ROLE.PS_SEQ = 111)