2017-06-14 51 views
0

我有一个Oracle视图,需要用它来填充页面上的不同名称。使用相同的数据库列根据搜索条件填充页面的名称。分配给名称的值仅取决于搜索条件。为了使这个更具体,在这里是一个例子Oracle SQL基于同一表中的条件检索列

EMPLOYEE_ID DEPT ROLE_TYPE  GROUP_TYPE 
123   IT  DEVELOPER  SUPPORT 
111   IT  DEVELOPER  APPL_SERVICES 
145   IT  QA    APPL_SERVICES 
222   IT  WEB    APPL_SERVICES 
322   IT  WEB    SUPPORT 

的字段名称/分类由该表来填充如下

 WEB SUPPORT SERVICES 
    WEB APPLICATION SERVICES 
    DEVELOPER APPLICATION SERVICES 
    DEVELOPER SUPPORT SERVICES 
    QA APPLICATION SERVICES 
    QA SUPPORT SERVICES 

的逻辑是使用SQL滤波器如下:

where ROLE_TYPE='DEVELOPER' AND GROUP_TYPE='APPL_SERVICES' 
Then assign employee 111 to DEVELOPER APPLICATION SERVICES 

where ROLE_TYPE='DEVELOPER' AND GROUP_TYPE='SUPPORT' 
Then assign employee 123 to DEVELOPER SUPPORT SERVICES 

where ROLE_TYPE='WEB' AND GROUP_TYPE='SUPPORT' 
Then assign employee 322 to WEB SUPPORT SERVICES 

where ROLE_TYPE='WEB' AND GROUP_TYPE='APPL_SERVICES' 
Then assign employee 222 to WEB APPLICATION SERVICES 

and so on.. 

我的问题是什么是最好的方式来构建查询,而不必做多个查询?我不想为每个条件编写单独的查询。

为了澄清我的意思是,这里的UI显示会是什么样子:

USER   FUNCTION   POSITION   GROUP 







123  DEVELOPER SUPPORT SERVICES   DEVELOPER  SUPPORT SERVICES 

谢谢

+0

您是什么意思“将员工111分配给开发人员应用程序服务”。你的意思是你想更新你的表上的GROUP_TYPE列吗? –

+0

我的意思是显示员工编号功能角色 – BreenDeen

回答

1

你只需要使用case

select t.*, 
     (case when ROLE_TYPE = 'DEVELOPER' AND GROUP_TYPE = 'APPL_SERVICES' 
      then 'DEVELOPER APPLICATION SERVICES' 
      when ROLE_TYPE ='DEVELOPER' AND GROUP_TYPE = 'SUPPORT' 
      then 'DEVELOPER SUPPORT SERVICES' 
      when ROLE_TYPE = 'WEB' AND GROUP_TYPE = 'SUPPORT' 
      then 'WEB SUPPORT SERVICES' 
      when ROLE_TYPE = 'WEB' AND GROUP_TYPE = 'APPL_SERVICES' 
      then 'WEB APPLICATION SERVICES' 
     end) as new_group 
from . . . 
+0

非常感谢! – BreenDeen

0

DECODE功能会比较每列值逐一。如果您想根据一条语句进行比较,则可以使用它:

select 
    a.*, 
    decode(a.employee_id, 
    123,'DEVELOPER SUPPORT SERVICES', 
    111,'DEVELOPER APPLICATION SERVICE', 
    145,'QA Application services', 
    222,'WEB Application service', 
    322,'WEB SUPPORT SERVICES' 
) as new_group 
from table_name a;