免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2869 | 回复: 5
打印 上一主题 下一主题

这个sql怎么实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-03 23:17 |只看该作者 |倒序浏览
有个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个表的查询,总有记录取的不对。

谢谢

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2017-04-05 11:23:15
2 [报告]
发表于 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

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2017-04-05 11:23:15
3 [报告]
发表于 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

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2017-04-05 11:23:15
4 [报告]
发表于 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

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2017-04-05 11:23:15
5 [报告]
发表于 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

论坛徽章:
0
6 [报告]
发表于 2010-09-06 21:59 |只看该作者
后2种方法都能满足我的需求,非常感谢yunzhongyue
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP