Merge中能写流程控制语句吗?例如 if else,case when这种语句?
下面是我实际的问题
比较长,希望能有 大虾看完
反正就是要用一张表去更新另外一张表,之前学习了一下merge
如果 Merge中能写流程控制语句吗?例如 if else,case when这种语句?
这样就比较好了
终端更换信令月统计 规则 终端更换信令知识库
统计月份 月汇总 服务号码
服务号码
当月isdn 当前ISDN
本月isdn最早存在日期 上一个ISDN
上一个ISDN更新日期
上一个ISDN更新时长
最近一次ISDN更新日期
最近一次ISDN已经使用时长
ISDN更新次数
平均ISDN更新时长
上面有两个表,一个是 终端更换信令月统计(月汇总),号码就是主键,即一个号码只有一条记录
上面有两个表,一个是 终端更换信令知识库(也是每月更新一次),也是一个号码只有一条记录
现在需要通过终端更换信令月统计 去更新 终端更换信令知识库
我说一下大致的处理逻辑 如果 终端更换信令月统计 表中 服务号码(即手机号) 在 终端更换信令知识库 表中 不存在
那么实际是要在终端更换信令知识库 表 新增一条记录,先不考虑这个
关键是考虑 如果 终端更换信令月统计 表中 服务号码(即手机号) 在 终端更换信令知识库 表中 存在
那么实际是要在终端更换信令知识库 表更新一条记录
例如假设 123 这个号码在两个表中都存在了,假设现在是要统计3月份数据
如果在 终端更换信令月统计 表的当月isdn和 终端更换信令知识库 表中的当前isdn一致,
即都是 aaa
那么就不更新终端更换信令知识库 表中的 当前isdn
需要更新的是终端更换信令知识库 表中的 当前最近一次ISDN已经使用时长,
即用先前当前最近一次ISDN已经使用时长+当月的使用天数,什么意思呢,假设现在
终端更换信令知识库 表中的 当前最近一次ISDN已经使用时长 是182 天,而3月份是31
天,那么 当前最近一次ISDN已经使用时长 这个字段新的值是 182+31 =213 天。
其他字段都不用更新
如果在 终端更换信令月统计 表的当月isdn和 终端更换信令知识库 表中的当前isdn不一致,
例如 在 终端更换信令月统计 表的当月isdn 是aaa
在终端更换信令知识库 表中的当前isdn是bbb,
那么就要更新终端更换信令知识库 表中的 当前isdn
即将
上一个isdn更新为 bbb.
上一个ISDN更新日期 需要将最近一次ISDN更新日期这个值 拷贝过来,因为现在bbb已经成为了上一个isdn
同理上一个ISDN更新时长,也是指bbb这个isdn的更新时长,这个值要靠终端更换信令月统计 表的本月isdn最早存在日期 去计算 。即aaa是3月21日更新,那么3月1日到
3月20日还是bbb这个isdn
那么计算公司就是 最近一次ISDN已经使用时长+(本月isdn最早存在日期-当月第一天)
假设bbb已经使用了156天,那么就是 156+21-1=176 天
当前isdn更新为 aaa
最近一次ISDN更新日期 就是终端更换信令月统计表中的本月isdn最早存在日期
最近一次ISDN已经使用时长 就是 当前isdn的使用时长,即aaa的使用时长
那么就是当月最后一天减去本月isdn最早存在日期
例如3月最后一天是3月31日,而isdn最早存在日期是 3月21日
那么最近一次ISDN已经使用时长 就是 31-21 =10天
Isdn更新次数,因为发生了isdn更新,那么更新次数就要加一次
逻辑就是 Isdn更新次数= Isdn更新次数+1
如果原先的 Isdn更新次数是4,那么现在就是4+1=5
平均ISDN更新时长的计算规则是
上个isdn更新时长算60%,原有的平均isdn更新时长算40%,第一次时就直接拷贝上个isdn的更新时长,只有isdn发生变化了才更新该值
假设现在原有 平均ISDN更新时长 是200 天,而上个isdn,bbb是176 天
那么最新平均ISDN更新时长 =200*40%+176*60%
不知用merge是否能实现这么样的逻辑
如果不能,那估计就只能用游标了
不知是否还有什么更高效率的做法也ok 啊
请指教啊