写出满足要求的SQL语句

大牛Aaron 2013-07-17 01:37:25
T1、T2、T3为3张数据不全的表,如下所示:
T1
合同号 贷款金额 担保金额
001 1000 1000
002 2000
003 3000

T2
合同号 担保金额
002 1000
003 3000
004 1000

T3
合同号 贷款金额 抵押金额
002 1000
004 4000 3000

其中合同号唯一,同一合同号的各金额只会出现在其中一张表,写一条SQL得到下面的数据表:
合同号 贷款金额 担保金额 抵押金额
001 1000 1000
002 2000 1000 1000
003 3000 3000
004 4000 1000 3000
...全文
234 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
商科程序员 2013-07-18
  • 打赏
  • 举报
回复
引用 3 楼 kangchutoudewa 的回复:
判断值是否为空,来取到底显示哪一列的数据
这样最简单
牧码者 2013-07-18
  • 打赏
  • 举报
回复
判断值是否为空,来取到底显示哪一列的数据
筱_筱 2013-07-18
  • 打赏
  • 举报
回复
SELECT T.ID, T.DBMONEY, T.DBMONEY, T3.DYMONEY
  FROM (SELECT TA.ID, TA.DBMONEY, TB.DKMONEY
          FROM (
               
                (SELECT T1.ID, T1.DBMONEY
                   FROM T1 T1
                  WHERE T1.DBMONEY IS NOT NULL
                 UNION ALL
                 SELECT T2.ID, T2.DBMONEY
                   FROM T2 T2
                  WHERE T2.DBMONEY IS NOT NULL) TA --(合同号, 担保金额)
               
                FULL OUTER JOIN
               
                (SELECT T1.ID, T1.DKMONEY
                   FROM T1 T1
                  WHERE T1.DKMONEY IS NOT NULL
                 UNION ALL
                 SELECT T3.ID, T3.DKMONEY
                   FROM T3 T3
                  WHERE T3.DKMONEY IS NOT NULL) TB --(合同号, 贷款金额)
               
                ON TA.ID = TB.ID)) T,
       T3  --(合同号,抵押金额)
 WHERE T.ID = T3.ID(+)
davidyu720 2013-07-17
  • 打赏
  • 举报
回复
将 (T1.合同号, T1.担保金额) union all (T2.合同号, T2.担保金额) 得到的结果 如果"合同号"列上没有重复行,就可以直接用;如果有重复行,就group by T1.合同号 这样能得到 一张表 TA(合同号, 担保金额) 同样,从T1和T3得到一张表 TB(合同号, 贷款金额) 从 T3可以得到 TC(合同号,抵押金额) 最后用 full outer join 关联 TA TB TC 即可

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧