如何将两列合并为一列?

时间:2017-11-22 08:05:25

标签: sql oracle11g

我想从两个中选出一个列。 我有一个表达式" l_entity_key~r_entity_key"对于LHS和RHS字段,我有"规则"中的l_entity_key,r_entity_key列。分别表。

我的实际要求是找到给定entity_key或l_entity_key的所有值,r_entity_key其中l_entity_key = 10或r_entity_key = 10。 e.g

10~11
10~13
6~10
4~10

值10可以出现在表达式的任一侧,我想要的是值11,13,6,4

我试图实现上述结果的基本sql查询是:

SELECT L_ENTITY_KEY, R_ENTITY_KEY FROM RULE 
WHERE L_TYPE = 'Role' 
AND R_TYPE='Role' 
AND L_ENTITY_KEY = 10
OR R_ENTITY_KEY = 10;

当前输出:

L_ENTITY_KEY    R_ENTITY_KEY
------------    ------------
          9              10
         10              11
          4              10
          6              10

预期产出:

ENTITY_KEY
----------
        9
       11
        4
        6 

我尝试增强基本查询,尝试将两列合并为一个至少接近所需的结果,尝试自联接,右外连接和其他方式但我没有得到预期的输出。不共享其他查询以避免混淆,因为它们不接近期望的输出。

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

这将结合两个结果:

SELECT L_ENTITY_KEY as ENTITY_KEY FROM RULE 
WHERE L_TYPE = 'Role' 
AND R_TYPE='Role' 
AND R_ENTITY_KEY = 10
  UNION
SELECT R_ENTITY_KEY FROM RULE 
WHERE L_TYPE = 'Role' 
AND R_TYPE='Role' 
AND L_ENTITY_KEY = 10;

如果要保留重复项(即行UNION ALLUNION的两行4),则需要使用4~10而不是10~4

答案 1 :(得分:1)

使用case表达式返回关联值。类似的东西:

SELECT case when L_ENTITY_KEY = 10 then R_ENTITY_KEY else L_ENTITY_KEY end
FROM RULE 
WHERE (L_TYPE = 'Role' AND L_ENTITY_KEY = 10)
   OR (R_TYPE = 'Role' AND R_ENTITY_KEY = 10)