两个表计算,求根据条件循环相加语句,有举例...

aaca 2014-09-28 05:34:23
求mysql 或 oracle语句
查询表BP中name有记录,则把相应的数据合并到AP中,
字段zongji值为以表BP'riqi'值开始的表AP中多字段累加而成

举两个例子:

1、查询表BP数据 li 存在,则取其‘riqi’值203 计算 a.203+a.204+BP.sl为zongji值
2、查询表BP数据 ma 存在,则取其‘riqi’值202 计算 a.202+a.203+a.204+BP.sl为zongji值



表 AP 数据如下:
name  201  202  203   204
------------------------------------------------------------
wu   55   21   8   3.9
li    80   32.7  70.5  92
zha   23   61   空值  5.7
ma   91   56.1  7.03  97
ta   33   空值   34  91


表 BP 数据如下:
name  sl  riqi
------------------------------------
li   -30  203
wu  -150  203
ma  -43  202
zha  -50  201


希望得到如下数据:

name  201  202  203  204  riqi  sl  zongji
--------------------------------------------------------------------------------------------
wu   55   21   8   3.9  203  -150 -138.1 /*(来源为8+3.9-150)
li    80  32.7  70.5  92  203  -30  132.5
ma   91  56.1  7.03  97  202  -43  117.13
ta    33  空值  34   91
zha   23   61   空值  5.7  201  -50  39.7
...全文
98 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2014-09-29
  • 打赏
  • 举报
回复
select if(b.riqi=201,a.201+a.202+a.203+a.204, if(b.riqi=202,a.202+a.203+a.204, if(b.riqi=203,a.203+a.204,0))) from AP a inner join BP b on A.name= B.name
ACMAIN_CHM 2014-09-28
  • 打赏
  • 举报
回复
select AP.name , AP.201 , AP.202,  AP.203,  AP.204,  BP.riqi , BP.sl ,  if(isnull(BP.riqi),null, case BP.riqi when 201 then AP.201+AP.202+AP.203+AP.204+BP.sl when 202 then AP.202+AP.203+AP.204+BP.sl when 203 then AP.203+AP.204+BP.sl when 204 then AP.204+BP.sl end ) as zongji from AP left join BP on AP.name= BP.name

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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