2016-12-29 3 views
-1

У меня есть две таблицы запроса клиента и инвентарь таблицызапрос продукта от клиента с количеством

stock_available

itemid itemname stock 
P01  phone  200 

customer_request

orderno Cid Cname itemid qty  dt 
01  C01 vasu  p01  100  28-dec-2016  
02  C02 mahh  p01  80  28-dec-2016 
03  c03 gggg  p01  50  29-dec-2016 

Мне нужно написать запрос с cid,itemid,stock,qty,dt,orderno , сумма Кол из Itemid оленьей кожи превышает запас и заказ дт первого в первом из

Требуемого результата:

cid  itemid stock qty pending dt   orderno 
c01  p01  200  100  0  28/dec/2016 01 
c02  p02  100  80  0  28/dec/2016 02 
c03  p03  20  50 30  29/dec/2016 03 
+0

как же появляются 3 строки? 100 + 80 + 50> 200 .. – coderredoc

+0

Таблица Customer_request имеет 3 запроса всего 230. В нашей таблице акций у нас есть 200 очков, мы должны отдавать приоритет FIFO. Превышение 30 будет выпущено позже. –

+0

, но какова будет путёт вашего запроса? – coderredoc

ответ

0
select * from 
stock_available s , 
customer_request cr 
where s.itemid = cr.itemid 
order by cr.dt asc, cr.qty desc; 
+0

@NirmalR: проверьте ответ – coderredoc

+0

Дорогой сэр, это покажет результаты. Мне нужна моя сумма (qty) для itemid, не превышающая запас. и сортировать по dt и orderno Сначала приступить к первому подаче –

+0

Я не понимаю ваш вопрос..не совсем (что это?) ??? – coderredoc

1

Попробуйте это:

SELECT orderno, cid, cname, itemid, qty, dt, 
    CASE WHEN s > 0 THEN s ELSE 0 END - LAG(CASE WHEN s > 0 THEN s ELSE 0 END,1,0) over (partition by itemid order by orderno) pending 
FROM 
    (SELECT c.*, 
    SUM(c.qty) over (partition BY c.itemid order by c.dt, c.orderno) - s.stock s 
    FROM stock_available s 
    INNER JOIN customer_request c 
    ON s.itemid = c.itemid 
); 

Тест 1:

select * from stock_available; 

+--------+----------+-------+ 
| ITEMID | ITEMNAME | STOCK | 
+--------+----------+-------+ 
| P01 | phone | 200 | 
+--------+----------+-------+ 

select * from customer_request; 

+---------+-----+-------+--------+-----+-----------+ 
| ORDERNO | CID | CNAME | ITEMID | QTY | DT  | 
+---------+-----+-------+--------+-----+-----------+ 
| 1  | C01 | vasu | P01 | 100 | 28-DEC-16 | 
+---------+-----+-------+--------+-----+-----------+ 
| 2  | C02 | mahh | P01 | 80 | 28-DEC-16 | 
+---------+-----+-------+--------+-----+-----------+ 
| 3  | C03 | gggg | P01 | 50 | 29-DEC-16 | 
+---------+-----+-------+--------+-----+-----------+ 

Результат моего запроса:

+---------+-----+-------+--------+-----+-----------+---------+ 
| ORDERNO | CID | CNAME | ITEMID | QTY | DT  | PENDING | 
+---------+-----+-------+--------+-----+-----------+---------+ 
| 1  | C01 | vasu | P01 | 100 | 28-DEC-16 | 0  | 
+---------+-----+-------+--------+-----+-----------+---------+ 
| 2  | C02 | mahh | P01 | 80 | 28-DEC-16 | 0  | 
+---------+-----+-------+--------+-----+-----------+---------+ 
| 3  | C03 | gggg | P01 | 50 | 29-DEC-16 | 30  | 
+---------+-----+-------+--------+-----+-----------+---------+ 

Тест 2:

-- Added one more request 
insert into customer_request values(4, 'C04','some','P01',400,'30-Dec-2016'); 

+---------+-----+-------+--------+-----+-----------+---------+ 
| ORDERNO | CID | CNAME | ITEMID | QTY | DT  | PENDING | 
+---------+-----+-------+--------+-----+-----------+---------+ 
| 1  | C01 | vasu | P01 | 100 | 28-DEC-16 | 0  | 
+---------+-----+-------+--------+-----+-----------+---------+ 
| 2  | C02 | mahh | P01 | 80 | 28-DEC-16 | 0  | 
+---------+-----+-------+--------+-----+-----------+---------+ 
| 3  | C03 | gggg | P01 | 50 | 29-DEC-16 | 30  | 
+---------+-----+-------+--------+-----+-----------+---------+ 
| 4  | C04 | some | P01 | 400 | 30-DEC-16 | 400  | 
+---------+-----+-------+--------+-----+-----------+---------+ 

Тест 3:

insert into stock_available values ('P02','something else',10); 
insert into customer_request values(5, 'C05','someone','P02',50,'30-Dec-2016'); 

+---------+-----+---------+--------+-----+-----------+---------+ 
| ORDERNO | CID | CNAME | ITEMID | QTY | DT  | PENDING | 
+---------+-----+---------+--------+-----+-----------+---------+ 
| 1  | C01 | vasu | P01 | 100 | 28-DEC-16 | 0  | 
+---------+-----+---------+--------+-----+-----------+---------+ 
| 2  | C02 | mahh | P01 | 80 | 28-DEC-16 | 0  | 
+---------+-----+---------+--------+-----+-----------+---------+ 
| 3  | C03 | gggg | P01 | 50 | 29-DEC-16 | 30  | 
+---------+-----+---------+--------+-----+-----------+---------+ 
| 4  | C04 | some | P01 | 400 | 30-DEC-16 | 400  | 
+---------+-----+---------+--------+-----+-----------+---------+ 
| 5  | C05 | someone | P02 | 50 | 30-DEC-16 | 40  | 
+---------+-----+---------+--------+-----+-----------+---------+ 
+0

Привет.он не возвращает никакого значения, но выполняется запрос ORDERNO CID CNAME ITEMID QTY DT PENDING ---------- ---------- ---------- - -------- ---------------------- -------------------- ----- ---------------------- 0 выбранных строк –

+0

Спасибо, что его работа –

+0

Что делать, если я добавлю другой элемент, скажем, P2 с запас 10 и новый заказ для этого предмета, с количеством 50? – Aleksej

Смежные вопросы