 select  item_code,due_date, round(sum(demand),0) demand, sum(supply) supply, sum(stock_qty) stock_qty, sum(oth_supply) oth_supply, sum(pending_po) pending_po ,sum(pending_do) pending_do, sum(pending_indent) pending_indent, sum(pending_dr) pending_dr from 
 (
   SELECT  item.item_code__plan  as item_code,distorder_det.due_date as due_date, 
          sum(case when qty_confirm is null then 0 else qty_confirm end - case when qty_shipped is null then 0 else qty_shipped end) as demand, 
          0 as supply, 0 as stock_qty, 0 as oth_supply, 0 as pending_po, 
	  sum(case when qty_confirm is null then 0 else qty_confirm end - case when qty_shipped is null then 0 else qty_shipped end) as pending_do,
	  0 as pending_indent, 0 as pending_dr
     FROM distorder,distorder_det, item 
     WHERE ( distorder_det.item_code = item.item_code ) and 
           ( distorder.dist_order = distorder_det.dist_order  ) and 
          ( distorder.confirmed = 'Y'  ) and 
          ( distorder.site_code__ship in ('@sitecode@') ) AND   
          ( item.item_code__plan = '@itemcode@') AND 
          ( distorder_det.due_date <= to_date('@todate@'))   and 
          ( distorder.order_type not in (@ordtypes@) ) and 
          ( case when distorder.status is null then 'P' else distorder.status end = 'P') AND 
          ( case when qty_confirm is null then 0 else qty_confirm end - case when qty_shipped is null then 0 else qty_shipped end) > 0 
         Group By item.item_code__plan,distorder_det.due_date 
 UNION ALL 
   SELECT  item.item_code__plan  as item_code,distorder_det.due_date as due_date, 
           0 as demand, 
           sum(case when qty_confirm is null then 0 else qty_confirm end - case when qty_received is null then 0 else qty_received end ) as supply, 0 as stock_qty, sum(case when qty_confirm is null then 0 else qty_confirm end - case when qty_received is null then 0 else qty_received end ) as oth_supply, 0 as pending_po, sum(case when qty_confirm is null then 0 else qty_confirm end - case when qty_shipped is null then 0 else qty_shipped end) as pending_dr, 0 as pending_indent, 0 as pending_dr  
          FROM distorder,distorder_det, item 
      WHERE ( distorder_det.item_code = item.item_code ) and 
            ( distorder.dist_order = distorder_det.dist_order  ) and 
           ( distorder.confirmed = 'Y'  ) and 
           ( distorder.site_code__dlv in ('@sitecode@') ) AND 
          ( item.item_code__plan = '@itemcode@') AND 
           ( distorder_det.due_date <= to_date('@todate@')) and 
           ( distorder.order_type not in (@ordtypes@) ) and 
           ( case when distorder.status is null then 'P' else distorder.status end = 'P')   AND 
           (case when qty_confirm is null then 0 else qty_confirm end - case when qty_received is null then 0 else qty_received end ) > 0 
          Group By item.item_code__plan,distorder_det.due_date 
  UNION ALL 
SELECT   item.item_code__plan  as item_code,indent.req_date as due_date, 
           0 as demand , 
           sum(case when (case when indent.quantity is null then 0 else 
indent.quantity end - case when             
indent.ord_qty is null then 0 else indent.ord_qty end) < 0 then 0 else case 
when indent.quantity is null then 0 else 
indent.quantity end - case when indent.ord_qty is null then 0 else 
indent.ord_qty  end end  ) as supply,
0 as stock_qty, sum(case when (case when indent.quantity is null then 0 else 
indent.quantity end - case when             
indent.ord_qty is null then 0 else indent.ord_qty end) < 0 then 0 else case 
when indent.quantity is null then 0 else 
indent.quantity end - case when indent.ord_qty is null then 0 else 
indent.ord_qty  end end  ) as oth_supply, 0 as pending_po, 0 as pending_do, 
sum(case when (case when indent.quantity is null then 0 else 
indent.quantity end - case when             
indent.ord_qty is null then 0 else indent.ord_qty end) < 0 then 0 else case 
when indent.quantity is null then 0 else 
indent.quantity end - case when indent.ord_qty is null then 0 else 
indent.ord_qty  end end  ) as pending_indent, 0 as pending_dr 
      FROM indent,item 
     WHERE (  indent.item_code = item.item_code ) and 
                (indent.status in ('O','A')) and 
        (indent.site_code in ('@sitecode@'))  AND 
          ( item.item_code__plan = '@itemcode@') AND 
          (  indent.req_date         <= to_date('@todate@'))   
         Group By item.item_code__plan,indent.req_date   
  UNION ALL 

   SELECT   item.item_code__plan  as item_code,porddet.dlv_date as due_date, 
           0 as demand , 
           sum(case when (case when porddet.quantity__stduom is null then 0 else porddet.quantity__stduom end - case when porddet.dlv_qty is null then 0 else porddet.dlv_qty end) < 0 then 0 else case when porddet.quantity__stduom is null then 0 else porddet.quantity__stduom end - case when porddet.dlv_qty is null then 0 else porddet.dlv_qty end end  ) as supply, 0 as stock_qty, sum(case when (case when porddet.quantity__stduom is null then 0 else porddet.quantity__stduom end - case when porddet.dlv_qty is null then 0 else porddet.dlv_qty end) < 0 then 0 else case when porddet.quantity__stduom is null then 0 else porddet.quantity__stduom end - case when porddet.dlv_qty is null then 0 else porddet.dlv_qty end end  ) as oth_supply, sum(case when (case when porddet.quantity__stduom is null then 0 else porddet.quantity__stduom end - case when porddet.dlv_qty is null then 0 else porddet.dlv_qty end) < 0 then 0 else case when porddet.quantity__stduom is null then 0 else porddet.quantity__stduom end - case when porddet.dlv_qty is null then 0 else porddet.dlv_qty end end  ) as pending_po, 0 as pending_do, 0 as pending_indent, 0 as pending_dr   
      FROM porddet,porder, item 
     WHERE (  porddet.item_code = item.item_code ) and 
        (porddet.purc_order = porder.purc_order ) and  
        (porder.confirmed = 'Y') and 
        (porder.status not in('C','X')) and 
        (porddet.status not in('C','X')) and 
        (porddet.site_code in ('@sitecode@') ) AND 
          ( item.item_code__plan = '@itemcode@') AND 
        (  porder.pord_type not in (@ordtypes@) ) and 
        (  porddet.dlv_date         <= to_date('@todate@'))   
         Group By item.item_code__plan,porddet.dlv_date 
 UNION ALL 
         SELECT  item.item_code__plan  as item_code,FN_MRP_DUEDATE(to_date('@fromdate@')) as due_date, 
         0 as demand , 
         DDF_INV_CLSTK_MRP('@sitecode@',item.item_code,to_date(fn_sysdate())) as supply, 0 as stock_qty, 0 as oth_supply, 0 as pending_po, 0 as pending_do, 0 as pending_indent, 0 as pending_dr  
         FROM  item 
         WHERE  item.item_code__plan= '@itemcode@' 
         and   DDF_INV_CLSTK_MRP('@sitecode@',item.item_code,to_date(fn_sysdate())) > 0 
UNION ALL
	SELECT  item.item_code__plan as item_code, mps_order.due_date as due_date, 
		sum(mps_order.quantity) as demand, 0 as supply , 0 as stock_qty, 0 as oth_supply, 0 as pending_po, 0 as pending_do, 0 as pending_indent, 0 as pending_dr 
  FROM   mps_order, item
  WHERE ( mps_order.item_code = item.item_code ) and
  			(mps_order.site_code in ('@sitecode@') ) AND  
		  (item.item_code__plan  = '@itemcode@' ) AND  
        (mps_order.due_date >= to_date('@fromdate@')) AND  
        (mps_order.due_date <= to_date('@todate@')) AND
		  ( case when mps_order.status is null then 'P' else mps_order.status end in ('P','T','M'))
Group By item.item_code__plan, mps_order.due_date
 
 )  
 group by item_code,due_date 
 having sum(demand) <> 0 or sum(supply) <> 0