2017-08-05 4 views
0

Je suis novice à SQL. Bien que, je peux écrire des jointures de base mais mon directeur m'a demandé de fournir un rapport avec l'exigence suivante.Suggestion de requête complexe pour ERP

Il veut trouver toutes les factures où le même élément est présent mais avec l'emballage différent ..

du point de vue de la structure de la table:

TBL_ITEM (Table) 
ITEM_ID (PK) 
ITEM_NAME 

TBL_PACKING (Table) 
PACKING_ID (PK) 
PACKING 

TBL_INVOICE(Table) 
INVOICE_ID (PK) 
ITEM_ID (FK) 
PACKING_ID (FK) 

PS: Je l'ai éliminé des colonnes qui ne sont pas nécessaires pour Maintenant, basé sur la structure de tableau ci-dessus, voici le scénario.

1) Acheteur A a acheté deux articles différents mais un même emballage dans une seule facture - Cela ne devrait pas faire partie de la liste puisque le point est différent

2) Acheteur B a acheté un produit deux fois avec un même emballage en simple facture - BESOIN cette liste

3) Acheteur C a acheté un article avec deux emballages différents - BESOIN cette liste

S'il vous plaît considérer que tout le scénario est applicable pour une facture de regroupement devrait donc être d'abord au niveau de la facture puis à niveau de l'article ... Pour ellaborate:

Acheteur D a acheté des articles trois fois sur trois factures différentes

Invoice 1: Item A; packing 1kg 
Invoice 2: Item B; packing 2kg 
Invoice 3: Item A; packing 1kg; Item B; 2kg 

pour le scénario acheteur D, il devrait apparaître sur le rapport puisque chaque facture ne pas combinaison d'article avec l'emballage identiques ou différents ..

J'ai essayé le groupement et le curseur mais ce n'est pas juste, je suppose. Je veux savoir si cela peut être réalisé avec une requête et si quelqu'un peut aider ce serait génial.

J'utilise MS SQL 2005

+1

Bonjour, Ce n'est pas un travail à domicile. Je travaille pour une entreprise qui s'occupe du système ERP. Récemment, le client a demandé un rapport qui montre de tels détails, car le calcul du taux au niveau de l'emballage ne fonctionne pas comme prévu, le client a donc demandé qu'un rapport vérifie et informe ses parties en conséquence. – TUSHKI

Répondre

1

Ceci est assez simple. Vous pouvez obtenir la liste des articles en faisant:

select i.invoice_id, i.item_id 
from tbl_invoice i 
group by i.invoice_id, i.item_id 
having min(i.packing_id) <> max(i.packing_id); 

Ceci vous donne la liste des paires de facture/article qui répondent à votre question.