当前位置: 代码迷 >> Oracle开发 >> 怎样实现这种成效
  详细解决方案

怎样实现这种成效

热度:61   发布时间:2016-04-24 06:44:46.0
怎样实现这种效果?
表一:
编号  名称  类别  金额
D1      A      X     100
D2      B      Y     200
D3      C      X     150
D3      C      Y     300
D4      D      X     500
表二:
编号  类别  结算金额  结算方式
D1     X        890        电汇
D2     Y        751        承兑
D3     X        521        电汇
D4     X        654        电汇

结果
编号  名称  类别  金额   结算金额  结算方式
D1      A      X       100     890         电汇
D2      B      Y       200     751         承兑
D3      C      X       150     521         电汇
D3      C      Y       300     0            电汇

D4      D      X       500     654         电汇

根据编号、类别左连接查询,查询结果表二中没有记录的,结算方式使用有记录的结算方式补充,结算金额用0补充
------解决方案--------------------
with
t as (select 'D1' "编号", 'A' "名称",'X' "类别",100 "金额"  from dual
union all 
select 'D2' "编号", 'B' "名称",'Y' "类别",200 "金额"  from dual
union all 
select 'D3' "编号", 'C' "名称",'X' "类别",150 "金额"  from dual
union all 
select 'D3' "编号", 'C' "名称",'Y' "类别",300 "金额"  from dual
union all 
select 'D4' "编号", 'D' "名称",'X' "类别",500 "金额"  from dual),
t1 as (select 'D1' "编号",'X' "类别",890 "结算金额",'电汇' "结算方式" from dual
union all 
select 'D2' "编号",'Y' "类别",751 "结算金额",'承兑' "结算方式" from dual
union all 
select 'D3' "编号",'X' "类别",521 "结算金额",'电汇' "结算方式" from dual
union all 
select 'D4' "编号",'X' "类别",654 "结算金额",'电汇' "结算方式" from dual
)
select t."编号",t."名称",t."类别",t."金额",decode(t1."结算金额",null,0,t1."结算金额"),t1."结算方式"
from t left join t1 on
t."编号"=t1."编号"
and t."类别"=t1."类别"
order by t."编号";

------解决方案--------------------
上面的忘了加查询结果表二中没有记录的结算方式使用有记录的结算方式补充
with
t as (select 'D1' "编号", 'A' "名称",'X' "类别",100 "金额"  from dual
union all 
select 'D2' "编号", 'B' "名称",'Y' "类别",200 "金额"  from dual
union all 
select 'D3' "编号", 'C' "名称",'X' "类别",150 "金额"  from dual
union all 
select 'D3' "编号", 'C' "名称",'Y' "类别",300 "金额"  from dual
union all 
select 'D4' "编号", 'D' "名称",'X' "类别",500 "金额"  from dual),
t1 as (select 'D1' "编号",'X' "类别",890 "结算金额",'电汇' "结算方式" from dual
union all 
select 'D2' "编号",'Y' "类别",751 "结算金额",'承兑' "结算方式" from dual
union all 
select 'D3' "编号",'X' "类别",521 "结算金额",'电汇' "结算方式" from dual
union all 
select 'D4' "编号",'X' "类别",654 "结算金额",'电汇' "结算方式" from dual
)
select t."编号",t."名称",t."类别",t."金额",decode(t1."结算金额",null,0,t1."结算金额"),
decode(t1."结算方式",null,(select t1."结算方式" from t1 where t."编号"=t1."编号"),t1."结算方式") "结算方式"
from t left join t1 on
t."编号"=t1."编号"
and t."类别"=t1."类别"
order by t."编号",t."金额";

------解决方案--------------------
楼上,(select t1."结算方式" from t1 where t."编号"=t1."编号"),这句请加个top 1,不然容易出错
------解决方案--------------------
...楼上穿越到sqlserver了吧
------解决方案--------------------
我去,还真是,oracle是rownumber = 1吧
------解决方案--------------------
  相关解决方案