我有一个表格,如下所示,它将包含多行数据 - 最多几行。
lvl2 | lvl3 | lvl6 | this_rep_cycle | last_rep_cycle | prev_rep_cycle | rowType
================================================================================
ASSET | CURR | FI | 214,060,924,928 | 0 | 0 | 1-Total
ASSET | CURR | FI | 25,199,630,336 | 0 | 0 | 3-Bal
ASSET | CURR | FX | 123,941,472 | 0 | 0 | 1-Total
ASSET | CURR | FX | 0 | 0 | 0 | 3-Bal
我需要的是使用相同的lv12,vl3,lvl6在表格中插入一个新行,但其中:
this_rep_cycle = (this_rep_cycle for rowType = '3-Bal' / this_rep_cycle for rowType = '1-total)
last_rep_cycle = (last_rep_cycle for rowType = '3-Bal' / last_rep_cycle for rowType = '1-total)
prev_rep_cycle = (prev_rep_cycle for rowType = '3-Bal' / prev_rep_cycle for rowType = '1-total)
最终结果如下:
lvl2 | lvl3 | lvl6 | this_rep_cycle | last_rep_cycle | prev_rep_cycle | rowType
================================================================================
ASSET | CURR | FI | 214,060,924,928 | 0 | 0 | 1-Total
ASSET | CURR | FI | 25,199,630,336 | 0 | 0 | 3-Bal
ASSET | CURR | FI | 11.77 | 0 | 0 | 4-%
ASSET | CURR | FX | 123,941,472 | 0 | 0 | 1-Total
ASSET | CURR | FX | 0 | 0 | 0 | 3-Bal
ASSET | CURR | FX | 0 | 0 | 0 | 4-%
我写了一个自我加入来实现这个目标:
set arithignore on
select
pd_1.lvl2, pd_1.lvl3, pd_1.lvl4, pd_1.lvl6, pd_2.last_report_cycle as p2_lrp, pd_1.last_report_cycle as p1_lrp,
(pd_2.this_report_cycle / pd_1.this_report_cycle)*100 as this_report_cycle,
(pd_2.last_report_cycle / pd_1.last_report_cycle)*100 as last_report_cycle
-- (pd_2.prev_report_cycle / pd_1.prev_report_cycle)*100 as prev_report_cycle,
-- '4-%' as [percentage]
from ProxyTrending pd_1
inner join ProxyTrending pd_2 on pd_2.rowType = '3-Bal'
AND pd_1.lvl2 = pd_2.lvl2
AND pd_1.lvl3 = pd_2.lvl3
AND pd_1.lvl4 = pd_2.lvl4
AND pd_1.lvl6 = pd_2.lvl6
where pd_1.rowType = '1-Total'
--order by pd_1.lvl2, pd_1.lvl3, pd_1.lvl4, pd_1.lvl6
set arithignore off
我需要set arithignore
,因为我可以体验div / 0,但是当我执行上述操作时,如果(report_cycle / report_cycle)*100
中只有一个被取消注释,它(部分)可以工作 - 这些行中有2个或更多返回零结果。
另外,如果我只有一个(report_cycle / report_cycle)*100
未注释,则返回60个结果,其中有106个“总共”记录和106个“3-Bal”记录 - 我本来希望proc能够运行并返回106'4%'的结果。
我不确定我错过了什么。
答案 0 :(得分:0)
好吧,我有错误的原因。如果我执行:
select pd_2.this_report_cycle, pd_1.this_report_cycle...
语句执行并返回值。如果我放置:
select pd_2.this_report_cycle, pd_1.this_report_cycle,
(pd_2.this_report_cycle / pd_1.this_report_cycle)*100 as expected_result
如果其中任何一个值为0,则查询返回零行,尽管存在ARITHIGNORE设置。
CASE声明解决了这个问题。