Problema con inner join
Publicado por Diego (13 intervenciones) el 01/06/2017 12:59:20
Buenos días.
Tengo un problema al hacer una consulta con inner join.
Tengo las siguientes tablas:
T1
SFDOCU SFTIEO sku SFTALL SFCANT
201 20 1 s 1
202 20 1 l 1
202 20 1 m 3
202 20 2 m 2
202 20 3 m 1
203 21 3 s 1
202 21 3 m 1
202 21 2 m 2
204 22 3 m 2
204 22 2 m 1
204 22 2 l 2
204 22 2 m 2
T2
sku
1
1
2
1
2
La columna SFDOCU y SFTIEO sería el id principal, el dato que queremos sacar.
La columna sku, el tipo de producto
La columna SFCANT la cantidad de productos
La columna SFTALL la queremos ignorar, por lo que queremos obtener la suma de cant agrupados por sku.
Lo que quiero obtener tras la consulta es SFDOCU, SFTIEO ordenados por el número de productos coincidentes en la TABLA2 y mostrar una columna con el número de coincidencias. Tampoco quiero que se muestren los resultados que excedan de números de productos en la tabla2 con respecto a la tabla 1.
Pongo el resultado que quisiera obtener:
SFDOCU SFTIEO sku SUMA TOTAL
201 20 1 1 1
202 20 1 6 5
202 21 2 2 2
204 22 2 5 2
Es decir, el 201 20 no debería mostrarse, ya que hay más unidades en la TABLA2 que en la TABLA1 y el resto que se muestran Ordenados por número de coincidencias
La consulta que he conseguido hasta ahora:
SELECT SFDOCU, SFTIEO, Consulta.sku, SUMA, COUNT( Consulta.sku ) AS TOTAL
FROM (
SELECT SFDOCU, SFTIEO, T1.sku, SUM( SFCANT ) AS SUMA
FROM T1
GROUP BY SFDOCU, SFTIEO, T1.sku
) AS Consulta
INNER JOIN (
SELECT T2.sku, COUNT( T2.sku ) AS Repetidas
FROM T2
GROUP BY T2.sku
)T2 ON T2.sku = Consulta.sku
GROUP BY SFDOCU, SFTIEO
ORDER BY TOTAL
Me da el siguiente resultado, lejos de lo que pretendo:
SFDOCU SFTIEO sku SUMA TOTAL
201 20 1 1 1
202 21 2 2 1
204 22 2 5 1
202 20 1 4 2
Ya que no consigo ni las sumas de todos los sku (solo del que sale en el resultado) ni el total de coincidencias.
Alguna idea de como se podría hacer? O no es factible hacerlo en una sola consulta?
Gracias.
(Adjunto bbdd)
Tengo un problema al hacer una consulta con inner join.
Tengo las siguientes tablas:
T1
SFDOCU SFTIEO sku SFTALL SFCANT
201 20 1 s 1
202 20 1 l 1
202 20 1 m 3
202 20 2 m 2
202 20 3 m 1
203 21 3 s 1
202 21 3 m 1
202 21 2 m 2
204 22 3 m 2
204 22 2 m 1
204 22 2 l 2
204 22 2 m 2
T2
sku
1
1
2
1
2
La columna SFDOCU y SFTIEO sería el id principal, el dato que queremos sacar.
La columna sku, el tipo de producto
La columna SFCANT la cantidad de productos
La columna SFTALL la queremos ignorar, por lo que queremos obtener la suma de cant agrupados por sku.
Lo que quiero obtener tras la consulta es SFDOCU, SFTIEO ordenados por el número de productos coincidentes en la TABLA2 y mostrar una columna con el número de coincidencias. Tampoco quiero que se muestren los resultados que excedan de números de productos en la tabla2 con respecto a la tabla 1.
Pongo el resultado que quisiera obtener:
SFDOCU SFTIEO sku SUMA TOTAL
202 20 1 6 5
202 21 2 2 2
204 22 2 5 2
Es decir, el 201 20 no debería mostrarse, ya que hay más unidades en la TABLA2 que en la TABLA1 y el resto que se muestran Ordenados por número de coincidencias
La consulta que he conseguido hasta ahora:
SELECT SFDOCU, SFTIEO, Consulta.sku, SUMA, COUNT( Consulta.sku ) AS TOTAL
FROM (
SELECT SFDOCU, SFTIEO, T1.sku, SUM( SFCANT ) AS SUMA
FROM T1
GROUP BY SFDOCU, SFTIEO, T1.sku
) AS Consulta
INNER JOIN (
SELECT T2.sku, COUNT( T2.sku ) AS Repetidas
FROM T2
GROUP BY T2.sku
)T2 ON T2.sku = Consulta.sku
GROUP BY SFDOCU, SFTIEO
ORDER BY TOTAL
Me da el siguiente resultado, lejos de lo que pretendo:
SFDOCU SFTIEO sku SUMA TOTAL
201 20 1 1 1
202 21 2 2 1
204 22 2 5 1
202 20 1 4 2
Ya que no consigo ni las sumas de todos los sku (solo del que sale en el resultado) ni el total de coincidencias.
Alguna idea de como se podría hacer? O no es factible hacerlo en una sola consulta?
Gracias.
(Adjunto bbdd)
- prueba-1.rar(721,0 B)
Valora esta pregunta
0