Oracle - 查看,显示来自不同列的一列值

时间:2016-03-29 04:18:25

标签: sql oracle view

我正在尝试从一个表创建某些字段的视图。由于限制,视图必须采用此格式。

让我们调用表Employee。如果Category字段中的值= A,我需要视图显示字段Info1。如果Category字段中的值= B,则需要Info2值。

Create View Emp as Select name, category, info from 
  (select name, category, info1 from employee where category='A') 
UNION 
  (select name, category, info2 from employee where category <>'A')

我的理解是这可以通过union来完成,但是我的视图有很多字段,并且查询对于union来说会很长。还有另一种方法可以达到相同的效果吗?通过DECODE方法或许?

Name   ID   Category    Info1    Info2 </h1>
Max    11   A           VIP      Present 
---
Sandra 22   A           VIP      XXX 
---
Lou    33   B           Regular  XXX 
---
Pat    44   B           VIP      XXX 
---

2 个答案:

答案 0 :(得分:1)

您可能需要案例陈述

 Create View Emp as
   Select name, category, 
          CASE WHEN category='A' THEN info1 ELSE info2 END as INFO 
   from employee

或者您可能想要加入

 Create View Emp as
   Select a.name, a.category, b.info1, c.info2
   from employee a
   join employee b on (a.name, a.category) = (b.name, b.category) and b.category = 'A'
   join employee c on (a.name, a.category) = (c.name, c.category) and c.category <> 'A'

或者你可以坚持联盟 - 但如果你这样做,我建议联合所有 - 它会更快。

无论如何,你真正想要的东西取决于你没有告诉我们的所有要求。

不要害怕长时间的查询 - 查询的行数确实没有错 - 它可以是100行的长度并产生更快的输出然后是较小的查询做同样的事情。

答案 1 :(得分:0)

Create View Emp
as
  Select name,
         category,
         CASE category WHEN 'A' THEN info1 ELSE info2 END AS info
  from   employee