Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

need help in forming sql query

i have one master table and 2 tables, one is inward table and the other one is issue_return_broken table. all the 3 tables are related using the ITEM_CODE (primary key).. if i run the below 3 queries ,

Master query :

 select item_code, item_name , item_spec, item_quantity,item_unitprice,item_value from      
 ven_inv_partmaster
 where item_code ='NAVTES13'

Query 1:

select entry_date, quantity_in from ven_inv_inwardmaster    
 where item_code ='NAVTES13'
 group by entry_date,quantity_in

query 2:

 select issue_date, issue_qnty,rtn_qnty,brkn_qnty from ven_inv_ibrmaster_log ibrlog  
   where ibrlog.item_code ='NAVTES13' and issue_dateid !=0
   group by issue_date,issue_qnty,rtn_qnty,brkn_qnty 

Query 3:

  select rtn_date, rtn_qnty,brkn_qnty from ven_inv_ibrmaster_log ibrlog   
   where ibrlog.item_code ='NAVTES13' and issue_dateid =0
   group by rtn_date,rtn_qnty,brkn_qnty 

i am getting the output as below,

  item_code item_name   item_spec  item_quantity    item_unitprice  item_value
  NAVTES13    NAVIN         TEST13       175               15.00    2175.00

output1:

   entry_date               quantity_in
   2012-04-01 00:00:00.000      50
   2012-04-05 00:00:00.000        50

output 2:

   issue_date             issue_qnty    rtn_qnty    brkn_qnty
   2012-04-02 00:00:00.000    25             0           0
   2012-04-10 00:00:00.000    10             0           0

output 3:

   rtn_date             rtn_qnty    brkn_qnty
  2012-04-05 00:00:00.000     10            0   
  2012-04-10 00:00:00.000     9         6

i need to combine all these queries into a single query and need a result set like this..

 Date        Quantity_Inward   Quantity_Issued   Return_Quantity   Broken_Quantity
  1/4/2012          50                  0                0               0
  2/4/2012           0                 25                0               0
  5/4/2012           0                  0               10               0 
  5/4/2012          50                  0                0               0
  10/4/2012          0                  0                9               6
  10/4/2012          0                 10                0               0

please help me out to solve this query..

inward & ibr master table :

enter image description here

like image 834
navbingo Avatar asked Dec 07 '25 03:12

navbingo


1 Answers

To combine the results of your queries in the manner shown, use UNION with ordering in an outer query:

SELECT
  DATE_FORMAT(logdate, '%e/%c/%Y') AS `Date`,
  quantity_in AS Quantity_Inward,
  issue_qnty  AS Quantity_Issued,
  rtn_qnty    AS Return_Quantity,
  brkn_qnty   AS Broken_Quantity
FROM (
  select date(entry_date) as logdate, quantity_in,
    0 as issue_qnty, 0 as rtn_qnty, 0 as brkn_qnty
  from ven_inv_inwardmaster
  where item_code ='NAVTES13'
UNION ALL
  select date(issue_date), 0, issue_qnty, rtn_qnty, brkn_qnty
  from ven_inv_ibrmaster_log
  where item_code ='NAVTES13' and issue_dateid != 0
UNION ALL
  select date(rtn_date), 0, 0, rtn_qnty, brkn_qnty
  from ven_inv_ibrmaster_log
  where item_code ='NAVTES13' and issue_dateid  = 0
) AS t
ORDER BY logdate ASC

You could even aggregate in the outer query if so desired (your sample output doesn't do so):

SELECT
  DATE_FORMAT(logdate, '%e/%c/%Y') AS `Date`,
  SUM(quantity_in) AS Quantity_Inward,
  SUM(issue_qnty)  AS Quantity_Issued,
  SUM(rtn_qnty)    AS Return_Quantity,
  SUM(brkn_qnty)   AS Broken_Quantity
FROM (
  ...
) AS t
GROUP BY logdate
ORDER BY logdate ASC

You might improve performance slightly by combining your queries 2 and 3 as follows:

  select
    date(if(issue_dateid = 0, rtn_date, issue_date)),
    if(issue_dateid = 0, 0, issue_qnty),
    rtn_qnty,
    brkn_qnty
  from ven_inv_ibrmaster_log
  where item_code = 'NAVTES13'

Note I have removed the GROUP BY clauses from your queries as your comment above suggests they are not required.

like image 183
eggyal Avatar answered Dec 08 '25 17:12

eggyal



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!