2010-05-29 4 views
0

J'ai deux tables comme détails d'achat et de la factureComment trouver les différences entre les valeurs d'une colonne spécifique basée sur une clé?

et je veux stocker l'inventaire/stock de chaque produit à partir des données de ces deux tableaux.

structure de Détails_d'achat.

'pid', 'int(10)' 
'product_id', 'int(10)' 
'quantity', 'float(8,2)' 
'amount', 'float(12,2)' 
'expiry_date', 'date' 
Structure

de invoice_details.

'invoice_id', 'int(10) unsigned' 
'product_id', 'int(10) unsigned' 
'quantity', 'float(10,2)' 
'price', 'float(12,2)' 

je veux calculer la quantité totale de stocks restants (quantité de somme des produits de purchase_details) - (quantité de somme des produits de invoice_details)

Product_id est serait identique pour les deux tables .

produit table se compose de données de produits, et la structure est

'id', 'int(10) unsigned' 
'cid', 'int(10) unsigned' 
'name', 'varchar(90)' 
'selling_price', 'float(10,2)' 
'mrp', 'float(10,2)' 
'reorder_level', 'bigint(20) unsigned' 

les invoice_details peuvent ou non avoir des entrées pour chaque product_id.

comment puis-je procéder?

+0

aucune réponse s'il vous plaît? – Vijay

Répondre

0
select (sum(purchase_details.quantity) - sum(invoice_details.quantity)) as stock 
    from products 
    left outer join purchase_details 
    on products.product_id == purchase_details.product_id 
    left outer join invoice_details 
    on products.product_id = invoice_details.product_id 
    group by products.product_id 

cela vous donnera le stock pour chaque produit et vous pouvez ajouter votre déclaration où si vous avez besoin de certains produits

select (sum(purchase_details.quantity) - sum(invoice_details.quantity)) as stock 
    from products 
    left outer join purchase_details 
    on products.product_id == purchase_details.product_id 
    left outer join invoice_details 
    on products.product_id = invoice_details.product_id 
    where products.product_id = 137 
    group by products.product_id 
+0

Il renvoie une valeur erronée .. J'ai 136 pour l'ID de produit 7 et 20 pour l'ID de produit 8 à l'achat, 12 pour l'ID de produit 7 dans la facture, donc total devrait être 124 pour les produits 7 et 20. son retentissement 224 et null – Vijay

+0

parce que vous devez d'abord appeler la table de produit, je vais modifier l'instruction –

+0

non ne fonctionne toujours pas Ma table de produit a des identifiants uniques, mais le product_id peut être répété à la fois dans les détails de l'achat et dans les détails de la facture. – Vijay

1

Celui-ci est ma nouvelle réponse, déjà testée sur sqlserver. Je ne suis pas sûr de mysql

select pro.id, SUM(pro.quantity - inv.quantity) 
from (select sum(p.quantity) as quantity, p.id as id from product p group by p.id) as pro, 
    (select sum(i.quantity) as quantity, i.id as id from invoice i group by i.id) as inv 
where inv.id = pro.id 
group by pro.id; 
+0

son ne fonctionne pas .. j'ai plusieurs produits dans la table des produits. Et product_id sera répété dans les deux tables purchase_details et invoice_details. Et je veux calculer stock pour chaque produit – Vijay

+0

uhm, ce qui signifie, vous voulez lister le stock (la différence) pour chaque produit id? – vodkhang

+0

exactement ce que je veux .. – Vijay

Questions connexes