这个问题困扰了我好久了,希望高手帮忙看下,多谢先!Oracle 9I:需要从2张表生成一个视图。
要求根据表A中的FLAG确定,如果FLAG=T,那么就从表B中找到相应的YEAR;如果FLAG=F,那就没有表B的事,直接填入NULL就行。表结构如下:table A
ID NAME FLAG
1 LI T
2 WANG F
3 TU FTABLE B
ID YEAR
1 2008
2 2007
3 2007
4 2006
5 2005要求生成的视图如下:
VIEW C
ID NAME YEAR
1 LI 2008
2 WANG NULL
3 TU NULL
要求根据表A中的FLAG确定,如果FLAG=T,那么就从表B中找到相应的YEAR;如果FLAG=F,那就没有表B的事,直接填入NULL就行。表结构如下:table A
ID NAME FLAG
1 LI T
2 WANG F
3 TU FTABLE B
ID YEAR
1 2008
2 2007
3 2007
4 2006
5 2005要求生成的视图如下:
VIEW C
ID NAME YEAR
1 LI 2008
2 WANG NULL
3 TU NULL
解决方案 »
- 急求一个SQL 谢谢!!!!
- oracle10g,有一个表和一个存储过程被锁了,但在v$locked_object中找不到记录,请问如何解决?
- 救死,,,,存储过程
- oracle中使用clientdataset的applyupdates进行提交提示表或视图不存在
- 变量的命名必须在BEGIN前进行命名吗?BEGIN和END之间可以命名吗
- 软回车的字符是什么?
- 时间的问题???
- 能不能对一个表delete的触发器(行级)中,更新此表的其他行的值?
- 触发器的效率问题!
- 结果不一,请教怎么才能得到以下结果呢?
- Olacle 中 not in/in ('','')语法中,怎么样可以用查出或传入的一个字符串来代替('','')?(100分求)
- ORACLE8上能查看程序所执行的sql语句吗?
as
select a.ID,a. NAME , case when a.FLAG='T' then b.YEAR else null end year
from a,b
where a.id=b.id
AS SELECT
ID,NAME,YEAR
FROM A,B
WHERE
(A.FLAG='T' AND A.ID=B.ID)
OR
(A.FLAG='F'); //这里面就不会写了!!!求助下!!
ID NAME FLAG
1 LI T
2 WANG F
3 TU F TABLE B
ID YEAR
1 2008
2 2007
3 2007
4 2006
5 2005 要求生成的视图如下:
VIEW C
ID NAME YEAR
1 LI 2008
7 WANG NULL
8 TU NULL
as
select a.ID,a. NAME , case when a.FLAG='T' then b.YEAR else null end year
from a,b
where a.id=b.id (+)
麻烦你帮我再看下以下的代码哦。我会再加20分的。多谢了这样就有问题了,A.KEY='F'的在VIEW里看不到了。外连接就有问题了。CREATE VIEW TESTVIEW(EVENTID,KEY,STREAMID,NODEID,ACKUSER,D_NAME)
AS SELECT
A.EVENTID,A.KEY,A.STREAMID,A.NODEID,A.ACKUSER,
CASE WHEN A.KEY='T' THEN D.NAME ELSE NULL END D_NAME
FROM EVENTS A,
STREAM_LOG C,
NODES D
WHERE
A.ACKUSER IS NULL AND
A.NODEID = D.NODEID (+) AND
A.STREAMID = C.STREAMID (+)AND
D.STREAMVERSIONID = C.CURRENTSTREAMVERSIONID // 这个加了(+)后会报错。
;
CASE
WHEN a.KEY = 'T'
THEN e.NAME
ELSE NULL
END e_name
FROM EVENTS a,
(SELECT c.streamid, d.nodeid, d.NAME
FROM stream_log c, nodes d
WHERE d.streamversionid = c.currentstreamversionid(+)) e
WHERE a.ackuser IS NULL
AND a.nodeid = e.nodeid(+)
AND a.streamid = e.streamid(+)