QTone 发表于 2010-09-03 23:17

这个sql怎么实现

有个t4表有这样的记录
1 1001    1.5   1
1 2001    1.5   2
1 1001    2.0   1   
1 3001    2.0   2

1001 所对应的名称在表t1里,t1表结构如下
1001一公司
2001 所对应的名称在表t2里,t2表结构如下
2001   二公司
3001 所对应的名称在表t3里,t3表结构如下
3001   三公司

想要实现这样的查询结果可以吗? 也就是在t4表的基础上,把其他3个表的户名取出来。

1001   一公司1.5
2001   二公司1.5
1001   一公司2.0
3001   三公司2.0

我用了case when,但是4个表的查询,总有记录取的不对。

谢谢

yunzhongyue 发表于 2010-09-04 11:58

select * from t1 union
select * from t2 union
select * from t3
into temp t;
select t4.b,t.b,t4.c
from t4,t
where t4.b=t.a

yunzhongyue 发表于 2010-09-04 12:00

在11.5中也可以这样写
select t4.b,t.b,t4.c
from t4,(select * from t1 union
select * from t2 union
select * from t3) t
where t4.b=t.a

yunzhongyue 发表于 2010-09-04 12:10

这样也可以!
select t4.b,
nvl(t1.b,nvl(t2.b,t3.b)),
t4.c
from t4,outer t1,outer t2,outer t3
where
t4.b=t1.a and
t4.b=t2.a and
t4.b=t3.a

yunzhongyue 发表于 2010-09-04 12:21

如果用CASE的话可以这样写
select t4.b,
case
when t1.b is null then
      case
          when t2.b is null then
               t3.b
          else t2.b
      end
      else t1.b
end,
t4.c
from t4,outer t1,outer t2,outer t3
where
t4.b=t1.a and
t4.b=t2.a and
t4.b=t3.a

QTone 发表于 2010-09-06 21:59

后2种方法都能满足我的需求,非常感谢yunzhongyue
页: [1]
查看完整版本: 这个sql怎么实现