2012-08-02 5 views
5

J'ai deux tables, table A:Afficher les enregistrements de deux tables côte à matching côté seulement quelques-uns des champs

Customer_ID Product Date Of Sale Pay Meth 1 Pay Meth 2 QTY 
----------- ------- ------------ ---------- ---------- --- 
     123 AB  1/1/2012    111   222 1 
     123 AB  1/1/2012    111   222 1 
     456 AC  2/1/2012    333   444 1 

et table B:

Customer_ID Product Date Of Sale Pay Meth 1 Pay Meth 2 QTY 
----------- ------- ------------ ---------- ---------- --- 
     123 AB  1/1/2012    111   222 2 
     456 AB  1/1/2012    124   111 1 

Je veux faire correspondre les données afin que le record du client 123 dans table A sont regroupées comme:

Customer_ID  Product  Date Of Sale  Pay Meth 1  Pay Meth 2  QTY 
-----------  -------  ------------  ----------  ----------  --- 
     123 AB  1/1/2012    111   222 2 

et à droite de celui-ci apparaît l'enregistrement suivant de table B:

Customer_ID  Product  Date Of Sale  Pay Meth 1  Pay Meth 2  QTY 
-----------  -------  ------------  ----------  ----------  --- 
     123 AB  1/1/2012    111   222 2 

également (il y a toujours un aussi), nous voulons montrer le troisième enregistrement table A et à droite de cet enregistrement du deuxième enregistrement table B (client 456) parce qu'ils ont la même Customer_ID, Product et Date of Sale

il devrait ressembler à

Customer_ID  Product  Date Of Sale  Pay Meth 1  Pay Meth 2  QTY Customer_ID  Product Date Of Sale  Pay Meth 1  Pay Meth 2  QTY 
-----------  -------  ------------  ----------  ----------  ---  -----------  -------  ------------  ----------  ----------  --- 
     123 AB  1/1/2012    111   222 1   123 AB  1/1/2012    111   222 1 
     456 AC  2/1/2012    333   444 1   456 AB  1/1/2012    124   111 1 
+0

Comme le souligne @AlexKalicki sur le produit et la date ' 456' ne correspondent pas entre les tables; est-ce juste une erreur d'écrire ceci? Aussi, voulez-vous vraiment que toutes les colonnes correspondantes soient répétées? –

Répondre

4

Vous pouvez faire une sous-requête sur chaque table pour obtenir la somme qté pour chaque client, puis rejoindre les résultats par l'identifiant client par exemple

SELECT a.*, b.* 
FROM (
    Select customer_id, product, dateofsale, PayMeth1, PayMeth2, SUM(Qty) as Qty 
    from TableA 
    Group by customer_id, product, dateofsale, PayMeth1, PayMeth2 
) a 
JOIN (
    Select customer_id, product, dateofsale, PayMeth1, PayMeth2, SUM(Qty) as Qty 
    from TableB 
    Group by customer_id, product, dateofsale, PayMeth1, PayMeth2 
) b 
ON a.customer_id = b.customer_id 
0

Qu'est-ce que vous cherchez est la commande SQL JOIN: http://www.tizag.com/sqlTutorial/sqljoin.php

Vous voudriez joindre les deux tables seulement pour les lignes où la colonne (s) que vous voulez faire correspondre. Donc, si vous essayez de faire correspondre les enregistrements des deux tables sur customer_id alors votre code SQL ressemblerait à quelque chose comme ceci:

SELECT * 
FROM A 
JOIN B 
ON A.Customer_ID = B.Customer_ID 

Je ne sais pas ce que vous voulez dire quand vous dites que ces 2 enregistrements ont le même ID, produit , et Date de vente cependant - ils semblent avoir seulement une identification (456) en commun.

+0

Cela ne concerne pas le regroupement de 'QTY' de' table A'. –

+0

Bon point, je ne me suis pas rendu compte que c'est ce que l'OP voulait faire avant le montage. Je ne peux pas penser à un bon moyen de le faire sans supprimer une entrée de la table et en mettant à jour l'autre avec la quantité correcte cependant. –

+0

Je luttais pour voir ce qui se passait . Je changerais le 'de A' à' de (sélectionnez l'id, ... sum (qty) d'un groupe par l'id, ...) A', ainsi vous joignez à une sous-requête qui fait l'agrégation. Je n'ai pas le temps d'écrire un exemple concret pour le moment. –

Questions connexes