2012-08-02 18 views
5

Tengo dos tablas, table A:Mostrar los registros de dos tablas de lado a coincidente en el lado sólo algunos de los campos

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 

y 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 

que quieren hacer coincidir los datos de manera que el registro para el cliente 123 en table A se agrupa como:

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

ya la derecha de ella aparece el siguiente registro de table B:

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

también (siempre hay una también) queremos mostrar el tercer registro en table A ya la derecha de ese registro el segundo registro en table B (cliente 456) porque tienen la misma Customer_ID, Product y Date of Sale

Por lo tanto, debería ser algo como

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

Como @AlexKalicki señala, el producto y la fecha para ' 456' no coinciden entre las tablas; ¿Es solo un error escribir esto? Además, ¿realmente desea que se repitan todas las columnas coincidentes? –

Respuesta

4

Usted puede hacer una sub consulta en cada mesa para conseguir el qty suma para cada cliente y luego unirse a los resultados de la identificación del cliente por ejemplo

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

Lo que estamos buscando es el comando SQL JOIN: http://www.tizag.com/sqlTutorial/sqljoin.php

Lo que quiere unir las dos tablas sólo para las filas donde la columna (s) que desea hacer coincidir lo haga. Así que si usted está tratando de igualar los registros de las dos tablas basadas en customer_id entonces su código SQL sería algo como esto:

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

No está seguro de lo que quiere decir cuando dice esas 2 registros tienen el mismo ID, Producto , y fecha de venta, aunque parecen tener una identificación (456) en común.

+0

Eso no se ocupa de la agrupación de 'QTY' de' tabla A'. –

+0

Buen punto, no me di cuenta de que eso es lo que OP quería hacer antes de la edición. No puedo pensar en una buena manera de hacerlo sin borrar una entrada de la tabla y actualizar la otra con la cantidad correcta. –

+0

Estaba luchando para ver qué estaba pasando . Cambiaría el 'de A' a' de (seleccione id, ... suma (cantidad) de Un grupo por id, ...) A', así que se está uniendo a una subconsulta que hace la agregación. Sin embargo, no tengo tiempo para escribir un ejemplo trabajado. –

Cuestiones relacionadas