2017-04-07 6 views
-2

Diese Meine Anfrage,Wie vereinfacht man diese Abfrage?

SELECT item_id,prod_name,closein,closeout,closein-closeout as closing_stock,stockin,closein-closeout+ stockin as current_balnce,stockout, 
closein-closeout+ stockin-stockout as balance,QtyIn,QtyOut 
    FROM (
     SELECT b.prod_name,a.item_id, 
     (select COALESCE ((select sum(qty) from stock_leger_head k 
     join mas_prodt_name_hd b ON k.item_id = b.id 
     where k.dept_id=21 and k.flag= 'I' and cast(k.date as date)::date between '2017-03-01' and '2017-04-06' and k.item_id=a.item_id),0)as QtyIn), 
     (select COALESCE ((select sum(qty) from stock_leger_head k 
     join mas_prodt_name_hd b ON k.item_id = b.id 
     where k.dept_id=21 and k.flag= 'O' and cast(k.date as date)::date between '2017-03-01' and '2017-04-06' and k.item_id=a.item_id),0)as QtyOut), 
     (select COALESCE ((select sum(qty) from stock_leger_head k 
     join mas_prodt_name_hd b ON k.item_id = b.id 
     where k.dept_id=21 and k.flag= 'I' and cast(k.date as date)::date <='2017-02-28' and k.item_id=a.item_id),0)as closein), 
     (select COALESCE ((select sum(qty) from stock_leger_head k 
     join mas_prodt_name_hd b ON k.item_id = b.id 
     where k.dept_id=21 and k.flag= 'O' and cast(k.date as date)::date <='2017-02-28' and k.item_id=a.item_id),0)as closeout), 
       (select COALESCE ((select sum(qty) from stock_leger_head k 
     join mas_prodt_name_hd b ON k.item_id = b.id 
     where k.dept_id=21 and k.flag= 'I' and cast(k.date as date)::date between '2017-03-01' and '2017-04-06' and k.item_id=a.item_id),0)as stockin), 
     (select COALESCE ((select sum(qty) from stock_leger_head k 
     join mas_prodt_name_hd b ON k.item_id = b.id 
     where k.dept_id=21 and k.flag= 'O' and cast(k.date as date)::date between '2017-03-01' and '2017-04-06' and k.item_id=a.item_id),0)as stockout) 
     FROM stock_leger_head a INNER JOIN 
     mas_prodt_name_hd b ON a.item_id = b.id 
     where a.dept_id=21 
     GROUP BY a.item_id,b.prod_name order by item_id asc 

Dank

+2

Mit welcher Datenbank? MySQL * oder * Postgres? – tadman

+0

Ich benutze Posygres. –

+0

Die Tags sind hier sehr wichtig, so finden die Leute Ihre Fragen. Dies als MySQL zu kennzeichnen ist irreführend. Sei vorsichtig und überprüfe es, es hilft, die Dinge organisiert zu halten. – tadman

Antwort

1

für Ihre Beispieldaten Warten und erstellen Tabellenskripten, ich glaube, Sie so etwas wie dies beginnen könnte:

SELECT C.PROD_NAME, B.* 
    , B.closein - B.closeout AS closing_stock 
    , B.closein - B.closeout + B.stockin AS current_balnce 
    , B.closein - B.closeout + B.stockin - B.stockout AS balance 
FROM 
    (SELECT item_id 
    ,SUM(CASE WHEN flag='I' AND cast(a.DATE AS DATE)::DATE <= '2017-02-28' THEN qty ELSE 0 END) AS closein 
    ,SUM(CASE WHEN flag='O' AND cast(a.DATE AS DATE)::DATE <= '2017-02-28' THEN qty ELSE 0 END) AS closeout  
    ,SUM(CASE WHEN flag='I' AND cast(a.DATE AS DATE)::DATE BETWEEN '2017-03-01' AND '2017-04-06' THEN qty ELSE 0 END) AS stockin 
    ,SUM(CASE WHEN flag='O' AND cast(a.DATE AS DATE)::DATE BETWEEN '2017-03-01' AND '2017-04-06' THEN qty ELSE 0 END) AS stockout 
    ,SUM(CASE WHEN flag='I' AND cast(a.DATE AS DATE)::DATE BETWEEN '2017-03-01' AND '2017-04-06' THEN qty ELSE 0 END) AS QtyIn 
    ,SUM(CASE WHEN flag='O' AND cast(a.DATE AS DATE)::DATE BETWEEN '2017-03-01' AND '2017-04-06' THEN qty ELSE 0 END) AS QtyOut 
    FROM stock_leger_head a 
    WHERE a.dept_id = 21 
    GROUP BY a.item_id 
    ) B 
LEFT JOIN mas_prodt_name_hd C ON B.item_id = C.id 
ORDER BY item_id 
; 
+0

Danke! Ihre Anfrage funktioniert gut Vielen Dank ... –