这个问题困扰了我好久了,希望高手帮忙看下,多谢先!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
解决方案 »
- impdp错误,请教
- WIN7 Oracle提示协议适配器错误
- 急,一道sql题??
- Oracle 8i安装问题
- ORACLE下用一张表的一个字段去更新另一张表的一个字段
- sql问题
- 一定要建存储过程才能执行吗?
- 从两个表取数据(非常简单)
- 一TABLE内有两条一摸一样的记录,现在想删除一条,保留一条,如何做?用sql_plus实现。
- ORACLE 9i下pro*c问题,急用,请大家帮忙,在线等,thanks first
- 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(+)