if公式一层可以自动求和,两层出现max

5395
8

haocx 数据老手Lv5

发表于2018-9-25 15:35

悬赏10

已解决

楼主
本帖最后由 haocx 于 2018-9-25 15:58 编辑

一层的公式:if(V_LES_CONTRACT_KPZY.BUSINESS_NATURE='0101' | V_LES_CONTRACT_KPZY.BUSINESS_NATURE='04',V_LES_CONTRACT_KPZY.OUTSTAND_BALANCE_RMB,0)
两层的公式:if(V_LES_CONTRACT_KPZY.BUSINESS_NATURE='0101' | V_LES_CONTRACT_KPZY.BUSINESS_NATURE='04',V_LES_CONTRACT_KPZY.OUTSTAND_BALANCE_RMB,if(V_LES_CONTRACT_KPZY.BUSINESS_NATURE='0104',V_LES_CONTRACT_KPZY.CAP_NET_AMT_RMB,null)),一层的时候,看sql出现的是sum自动加和,两层出现的是max取了最大值,全连接设了没用,指标勾了和去掉了也没用,进行了对两层的,值的加sum求和,会报空指针异常
SQL:
一层:select row_.*,rownum from ( select count(distinct a.PAPER_CONTRACT_NO) as C2,sum(case when (a.BUSINESS_NATURE = '0101') OR (a.BUSINESS_NATURE = '04') then a.OUTSTAND_BALANCE_RMB else 0 end) as D2,a.BUSINESS_NATURE as B2,a.USERID_ as A2,max(b.NAME) as mc_B20,max(c.NAME) as mc_A21
from V_LES_CONTRACT_KPZY a
,DIM_ZCYWXZ b
,DIM_JG c
where (A.BUSINESS_NATURE=B.ID(+)) and (A.USERID_=C.ID(+)) and (( SUBSTR(a.BBQ,1,6) = '201806') AND (a.USERID_ like '020%'))
group by a.USERID_,a.BUSINESS_NATURE )row_ where rownum <= 1000 两层:select row_.*,rownum from ( select count(distinct a.PAPER_CONTRACT_NO) as C2,max(case when (a.BUSINESS_NATURE = '0101') OR (a.BUSINESS_NATURE = '04') then a.OUTSTAND_BALANCE_RMB else case when a.BUSINESS_NATURE = '0104' then a.CAP_NET_AMT_RMB else NULL end end) as D2,a.BUSINESS_NATURE as B2,a.USERID_ as A2,max(b.NAME) as mc_B20,max(c.NAME) as mc_A21
from V_LES_CONTRACT_KPZY a
,DIM_ZCYWXZ b
,DIM_JG c
where (A.BUSINESS_NATURE=B.ID(+)) and (A.USERID_=C.ID(+)) and (( SUBSTR(a.BBQ,1,6) = '201806') AND (a.USERID_ like '020%'))
group by a.USERID_,a.BUSINESS_NATURE )row_ where rownum <= 1000


最近看过此主题的会员

esen_5DZFZFU7BU

esen_56A666P121

最佳答案

vip

发表于2018-9-25 15:35

只看该作者

取消 关注该作者的回复

把两层里面的null改成0 试试?
8个回答

只看楼主

vip 小试身手Lv3

发表于2018-9-25 15:55

只看该作者

取消 关注该作者的回复

沙发

能否把两段SQL分别发出来看一下?

haocx 数据老手Lv5

发表于2018-9-25 15:56

只看该作者

取消 关注该作者的回复

板凳

vip 发表于 2018-9-25 15:55
能否把两段SQL分别发出来看一下?

好的,稍等

tangmq 数据达人Lv4

发表于2018-9-25 15:57

只看该作者

取消 关注该作者的回复

地板

if嵌套的情况下也希望表达式能求和,试试在表达式加算子_s()

例如:V_LES_CONTRACT_KPZY.CAP_NET_AMT_RMB  变成  _s(V_LES_CONTRACT_KPZY.CAP_NET_AMT_RMB)

haocx 数据老手Lv5

发表于2018-9-25 15:59

只看该作者

取消 关注该作者的回复

5#

tangmq 发表于 2018-9-25 15:57
if嵌套的情况下也希望表达式能求和,试试在表达式加算子_s()

例如:V_LES_CONTRACT_KPZY.CAP_NET_AMT_RMB  ...

试了,不行,加了报错,空指针异常

vip 小试身手Lv3

发表于2018-9-25 15:35

只看该作者

取消 关注该作者的回复

6#

把两层里面的null改成0 试试?

haocx 数据老手Lv5

发表于2018-9-25 16:11

只看该作者

取消 关注该作者的回复

7#

解决了,把null 改成了0 ,然后实现了,

haocx 数据老手Lv5

发表于2018-9-25 16:14

只看该作者

取消 关注该作者的回复

8#

vip 发表于 2018-9-25 15:35
把两层里面的null改成0 试试?

嗯嗯,但是我之前也试过,但是好像没实现,尴尬了,现在改为0, 可以了,谢谢,这个null和0,有啥区别

haocx 数据老手Lv5

发表于2018-9-25 16:22

只看该作者

取消 关注该作者的回复

9#

vip 发表于 2018-9-25 15:55
能否把两段SQL分别发出来看一下?

那为啥,null,sql里执行显示的是max?

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号