クエリによって次のような出力が得られます。
ID customer_name_Now customer_name_Before MOVEMENT
123451 Rustle Bock ltd N £2,121
123451 N Rustle Bock ltd -£25,666,899
123452 Little Garage Ltd N £6,987
123453 N The Big Shop £15,850
話は、私は2ヶ月のデータを持っているということです。どちらの月も、先月の顧客か、現在の顧客かによって、顧客に動きがある場合とない場合があります。多くの場合、両方の月に顧客であるため、上記のような 2 つの行が得られます。
理想的な出力は次のようになります。
ID customer_name_Now customer_name_Before MOVEMENT
123451 Rustle Bock ltd Rustle Bock ltd -£25,664,778
123452 Little Garage Ltd N £6,987
123453 N The Big Shop £15,850
したがって、動きを合計して月単位の実際の動きを得る必要があり、顧客が両方の月に関係を持っている場合、顧客の名前は両方の列にある必要があります。
@DMK 初期出力を取得するために使用したクエリは次のとおりです。
select /*+ NO_REWRITE */
customer_id,
customer_name_now,
customer_name_before,
movement
from
(select /*+ NO_REWRITE */
main.customer_id,
main.customer_name_now,
main.customer_name_before,
main.limits_before,
main.limits_now,
sum(main.limits_now-main.limits_before) as movement
from
(select /*+ NO_REWRITE */
customer_id,
(customer_name_before) as customer_name_before,
(customer_name_now) as customer_name_now,
sum(limits_current) as limits_now,
sum(limits_previous) as limits_before
from
(select /*+ NO_REWRITE */
sub.customer_id,
sub.customer_name_now,
sub.customer_name_before,
sub.limits_current,
sub.limits_previous
from
(select /*+ NO_REWRITE */
T2.customer_ID,
(T2.customer_name) customer_name_now,
'N' customer_name_before,
sum(T26.AGREED_LIMIT) limits_current,
0 limits_previous
from
DWH_customer_HISTORY T2,
DWH_TIME_DIM T25,
DWH_FACILITY_MONTHLY T2
where
---some internal filters are applied here, i habe ot shown coz of security reasons----
and
T25.MONTH_END = '2012-11-30' and
group by
T2.customer_ID,
T2.customer_name,
) sub
union all
select /*+ NO_REWRITE */
sub.customer_id,
sub.customer_name_now,
sub.customer_name_before,
sub.limits_current,
sub.limits_previous
from
(select /*+ NO_REWRITE */
T2.customer_ID,
'N' as customer_name_now,
(T2.customer_name)customer_name_before,
0 limits_current,
sum(T2.AGREED_LIMIT) limits_previous,
from
DWH_customer_HISTORY T2,
DWH_TIME_DIM T25,
DWH_FACILITY_MONTHLY T2
where
---some internal filters are applied here, i habe ot shown coz of security reasons----
and
T25.MONTH_END = '2012-10-31'
group by
T2.customer_ID,
T2.customer_name,) sub
) un
group by
customer_id,
customer_name_now,
customer_name_before,) main
group by
main.customer_id,
main.customer_name_now,
main.customer_name_before,
main.limits_before,
main.limits_now)