我正在尝试从一个表创建某些字段的视图。由于限制,视图必须采用此格式。
让我们调用表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
---
答案 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