当前位置: 代码迷 >> Oracle开发 >> 高分帮忙写SQL语句解决方案
  详细解决方案

高分帮忙写SQL语句解决方案

热度:1010   发布时间:2016-04-24 08:04:40.0
高分帮忙写SQL语句
业务:

1个供地项目的出让约定有多期、实际支付也是多期的

GD_GUID 行政区代码 出让金额(万)
330100 10000


支付约定情况

ZFYD_GUID GD_GUID 期号 约定支付时间 金额(万)
1 2008-12-1 3000
2 2009-5-1 2000
3 2010-2-1 5000

实际支付:

ZFSJ_GUID GD_GUID 期号 约定支付时间 金额(万)
1 2008-12-30 3000
2 2009-9-1 2000

现在要列出 到当前时间点 出让金欠缴情况列表

字段如下:项目名称,出让金额,欠缴金额,约定支付期号,约定支付时间,约定支付金额, 

欠缴金额= (到当前时间点约定的金额-到当前时间点实际支付的金额)
约定支付期号、约定支付时间 未 最近一次 未按约定缴纳 期号和约定支付时间。

如 到4月30号 

则项目

项目名称、10000万,5000万,3,2010-2-1

由于数据量比较大,采用怎么方式才能性能更好的,请大家帮忙一下的。


相关的表结构:

----------------------------------------------
1.1 供地项目(T_GDXM)
代码 名称 数据类型 注释
GD_GUID 供地标识 VARCHAR(50)
XZQ_DM 行政区代码 VARCHAR(6)
XM_MC 项目名称 VARCHAR(150)
CR_JE 出让金额 NUMBER(10,4)

---------------------------------------------
1.2 出让金支付约定(T_CRJ_ZFYD)

代码 名称 数据类型 注释
ZFYD_GUID 支付约定标识 VARCHAR(50)
GD_GUID 供地标识 VARCHAR(50)
YD_QH 约定支付期号 INT
YD_SJ 约定支付时间 DATE
YD_JE 约定支付金额 NUMBER(10,4)

--------------------------------------------
1.3 出让金实际支付(T_CRJ_ZFSJ)

代码 名称 数据类型 注释
ZFSJ_GUID 实际支付标识 VARCHAR(50)
GD_GUID 供地标识 VARCHAR(50)
SJ_QH 支付期号 INT
SJ_SJ 支付时间 DATE
SJ_JE 支付金额 NUMBER(10,4)




------解决方案--------------------
提供建表语句和插入数据脚本
------解决方案--------------------
记事本写得 ,没测试
SQL code
select a.XM_MC as 项目名称,a.CR_JE as 出让金额 ,sum(nvl(b.YD_JE,0)) - sum(nvl(c.SJ_JE,0)) as 欠缴金额,max(b.YD_QH) as 约定支付期号,max(b.YD_SJ) as 约定支付时间from T_GDXM a , T_CRJ_ZFYD b ,T_CRJ_ZFSJ cwhere a.GD_GUID =b.GD_GUID and a.GD_GUID =c.GD_GUID and b.YD_SJ<sysdate and c.SJ_SJ <sysdategroup by a.XM_MC,a.CR_JE
------解决方案--------------------
参考sql:
select a.XM_MC as 项目名称,a.CR_JE as 出让金额 ,
sum(nvl(b.YD_JE,0)) - sum(nvl(c.SJ_JE,0)) as 欠缴金额,
max(b.YD_QH) as 约定支付期号,
max(b.YD_SJ) as 约定支付时间
from T_GDXM a left join T_CRJ_ZFYD b on a.GD_GUID =b.GD_GUID and b.YD_SJ<sysdate
left join T_CRJ_ZFSJ c on a.GD_GUID =c.GD_GUID and c.SJ_SJ <sysdate
group by a.XM_MC,a.CR_JE
------解决方案--------------------
探讨
记事本写得 ,没测试

SQL code
select a.XM_MC as 项目名称,a.CR_JE as 出让金额 ,
sum(nvl(b.YD_JE,0)) - sum(nvl(c.SJ_JE,0)) as 欠缴金额,
max(b.YD_QH) as 约定支付期号,
max(b.YD_SJ) as 约定支付时间
from T_GDXM a , T_CRJ_ZFYD b ,T_C……
  相关解决方案