请帮忙:有条件的VIEW如何写?(有点急)

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
如TABLEA 有COL1 ,COL2 ,COL3 ,COL4,COL5
TABLEB 有 COL1,COL2, COL3,COL4
要求:当TABLE A COL1 ,COL2的不为空时, COL3,COL4值用TABLE BCOL3,COL4的值代替,当TABLE A COL3 ,COL4的不为空时, COL1,COL2值用TABLE BCOL1,COL2的值代替;
注: TABLE BCOL1,COL2 ,COL3 ,COL4 是TABLE ACOL1 ,COL2 ,COL3, COL4的对应表,但在A表的数据可能在B表中没有;
view 的结果要如下:

COL1COL2 COL3COL4 COL5
A010001NULLNULL 123
A010002 NULL NULL 124
NULL NULL B01 00001 111
NULL NULLB0100002 112
TABLEB
COL1COL2COL3COL4
A01 0001B02 00001
A01 0002B02 00002
A02 0001B01 00001
A02 0002B01 00002
结果如下:
TABLE A
COL1COL2 COL3COL4COL5
A010001 B02 00001123
A010002 B02 00002124
A020001 B01 00001 111
A020002 B01 00002 112
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
UP
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
din
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我覺得這兩個條件矛盾
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
din
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
不会的 TABVLE A 的COL1 ,COL2为空时, COL3,COL4肯定不为空, 反之也是
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 hare 发布
[B]如TABLEA 有COL1 ,COL2 ,COL3 ,COL4,COL5
TABLEB 有 COL1,COL2, COL3,COL4
要求:当TABLE A COL1 ,COL2的不为空时, COL3,COL4值用TABLE BCOL3,COL4的值代替,当TABLE A COL3 ,COL4的不为空时, COL1,COL2值用TABLE BCOL1,COL2的值代替;
注: TABLE BCOL1,COL2 ,COL3 ,COL4 是TABLE ACOL1 ,COL2 ,COL3, COL4的对应表,但在A表的数据可能在B表中没有;
view 的结果要如下:

COL1COL2 COL3COL4 COL5
A010001NULLNULL 123
A010002 NULL NULL 124
NULL NULL B01 00001 111
NULL NULLB0100002 112
TABLEB
COL1COL2COL3COL4
A01 0001B02 00001
A01 0002B02 00002
A02 0001B01 00001
A02 0002B01 00002
结果如下:
TABLE A
COL1COL2 COL3COL4COL5
A010001 B02 00001123
A010002 B02 00002124
A020001 B01 00001 111
A020002 B01 00002 112 [/B]


select COL1COL2 COL3COL4 COL5 from a where col1~col4 are all not null
union
select col1,col2,(select disintct col 3 from b where ...),(select col 3 from b where ...) from a where col1!=null and col2 !=null and col3=null and col4=null
uion
etc

maybe could use temp table.
ps:any pk/fk on 2 table?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
还在不太明白,两个表之间没有FK,因为TABLE A的数据在TABLE B可能没有
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
select decode(a.col3, null, a.col1, b.col1) col1,
decode(a.col3, null, a.col1, b.col1) col2,
decode(a.col1, null, a.col3, b.col3) col3,
decode(a.col2, null, a.col4, b.col4) col4,
a.col5 col5
from a, b
where NVL(a.col1, '%') = NVL(b.col1(+), '%')
and NVL(a.col2, '%') = NVL(b.col2(+), '%')
and NVL(a.col3, '%') = NVL(b.col3(+), '%')
and NVL(a.col4, '%') = NVL(b.col4(+), '%')
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
select decode(a.col3, null, a.col1, b.col1) col1,
decode(a.col3, null, a.col1, b.col1) col2,
decode(a.col1, null, a.col3, b.col3) col3,
decode(a.col2, null, a.col4, b.col4) col4,
a.col5 col5
from a, b
where (NVL(a.col1, '%') = NVL(b.col1(+), '%')
and NVL(a.col2, '%') = NVL(b.col2(+), '%'))
or( NVL(a.col3, '%') = NVL(b.col3(+), '%')
and NVL(a.col4, '%') = NVL(b.col4(+), '%'))
对应关系只有一组相等就可以了, 用OR连 ,但有OR 和IN的不能用外关联
请问还有别的方法吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行