我有一个名为REV的Impala表,其中包含每个线代码的wire_code,amount和Reporting行。
+---------+------+----------------+
|wire_code| amt | Reporting_line |
+---------+------+----------------+
| abc | 100 | Database |
+---------+------+----------------+
| abc | 10 | Revenue |
+---------+------+----------------+
| def | 50 | Database |
+---------+------+----------------+
| def | 25 | Polland |
+---------+------+----------------+
| ghi | 250 | Cost |
+---------+------+----------------+
| jkl | 300 | Cost |
+---------+------+----------------+
and the other table is FA which is having wire_code and Ajusted_wire_code
+---------+------+
|wire_code|adj_wc|
+---------+------+
| abc | def |
+---------+------+
| ghi | jkl |
+---------+------+
I need to adjust the amount of wire code which is available as adj_wc in FA table.
For example:
FA表格中存在“abc”并且它被调整为“def”然后我的输出应该是 - wire_code“def”具有如下(abc和def)的量并且“abc”量将保持相同。
我正在使用下面提供的查询,它正在删除在Wire代码中不常见的记录,例如,def与报告行,Polland。和abc有一个额外的报告行收入,当abc转移到def时,需要将其添加到def wire代码中。
abc正在调整为def - 报告的ab行与abc中不存在的行将保持相同,并且将调整常见的报告行。
select r.wire_code, r.amt+coalesce(a.amt,0) as amt
from REV r
left outer join FA f on r.wire_code=f.adj_wc --adjustments
left outer join REV a on f.wire_code=a.wire_code --adjusted amount
Where REP.REPORTING_LINE = REP1.REPORTING_LINE
;
预期成绩:
+---------+------+----------------+
|wire_code| amt | Reporting_line |
+---------+------+----------------+
| abc | 100 | Database |
+---------+------+----------------+
| abc | 10 | Revenue |
+---------+------+----------------+
| def | 150 | Database |
+---------+------+----------------+
| def | 10 | Revenue |
+---------+------+----------------+
| def | 25 | Polland |
+---------+------+----------------+
| ghi | 250 | Cost |
+---------+------+----------------+
| jkl | 550 | Cost |
+---------+------+----------------+
我认为下面的查询在蜂巢中工作
尝试黑斑羚,让我知道
create table rev
(
wire_code varchar(200),
amt int,
reporting varchar(200)
);
insert into rev values ('abc',100,'Database');
insert into rev values ('abc',10,'Revenue');
insert into rev values ('def',50,'Database');
insert into rev values ('def',25,'Polland');
insert into rev values ('ghi',250,'cost');
insert into rev values ('jkl',300,'cost');
create table fa
(
wire_code varchar(200),
adj_wc varchar(200)
);
insert into fa values ('abc','def');
insert into fa values ('ghi','jkl');
select rev.wire_code,
case when rev.wire_code=adj_wc then sum(amt) over(partition by reporting)
else amt end as amt,reporting
from rev inner join fa
on (rev.wire_code=fa.wire_code or rev.wire_code=fa.adj_wc)
order by 1