Положение таблицы, как показано ниже.
CREATE TABLE position (
tran_Date date,
clientid varchar(255),
stock varchar(255),
quantity number
);
insert into position values ('23-AUG-2018','Client1','Infosys',100);
insert into position values ('23-AUG-2018','Client1','Wipro',200);
insert into position values ('23-AUG-2018','Client1','TechM',150);
insert into position values ('23-AUG-2018','Client2','IBM',100);
insert into position values ('24-AUG-2018','Client1','Infosys',150);
insert into position values ('24-AUG-2018','Client1','Wipro',150);
insert into position values ('24-AUG-2018','Client2','IBM',100);
Мне нужен запрос для получения данных из таблицы позиций, как показано ниже в формате. Ответом должен быть один запрос.
ClientID,
Stock,
ChangeInQty(a calculative bucket which will hold the diff of qty between 2 dates),
classification(a calculative bucket on changeinqty.
IF changeinqty in '-'(negative) 'shares taken down'
if changeinqty in '+'(positive) 'shares taken up'
if changeinqty in '0'(no change) 'shares remain same'
if changeinqty is indeterminable 'shares position removed')
Мой подход был таким.
Select clientid,stock,changeinqty,
case
when x.changeinqty >0 then 'Taken Up'
when x.changeinqty <0 then 'Taken Down'
when x.changeinqty =0 then 'Same'
when x.changeinqty is null then 'Removed'
end as classification
From (select a.clientid,a.stock,a.quantity-b.quantity as changeinqty from
(Select tran_date,clientid,stock,quantity from position where tran_date='23-Aug-2018') a left join
(Select tran_date,clientid,stock,quantity from position where tran_date='24-Aug-2018') b
on a.clientid=b.clientid and a.stock=b.stock) x;