SQL - Mostrar solo los documentos que se repiten en ambas consultas

 
Vista:

Mostrar solo los documentos que se repiten en ambas consultas

Publicado por Viviana (4 intervenciones) el 14/10/2014 22:50:01
Estimados:

Tengo la siguiente consulta y necesito que me muestre solo los documentos que se repiten en ambas consultas


SELECT DISTINCT A.[Documento], SUM(B.[Cantidad]) FROM A
INNER JOIN B ON A.Documento = B.Documento
INNER JOIN C ON C.Codigo = B.Codigo
WHERE C.[Grupo] ='103' AND B.[Cantidad] <>0
GROUP BY A.[Documento]

UNION ALL
SELECT DISTINCT A.[Documento], SUM (A.[Kilos]) FROM A WHERE A.[Tipo] ='73'
GROUP BY A.[Documento]
ORDER BY A.[Documento]


Resultado con la consulta que tengo actualmente

Doc Total
10100 50
10101 120
10102 85
10102 150
10103 75
10104 250
10105 20
10105 350

Necesito que solo me muestre de la sgte manera:

Doc Total Total 2
10102 85 150
10105 20 350


Alguien me podría ayudar?

Muchas gracias a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Mostrar solo los documentos que se repiten en ambas consultas

Publicado por Isaias (1921 intervenciones) el 14/10/2014 22:55:19
¿En que base de datos y como es que llegas a ese resultado?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar solo los documentos que se repiten en ambas consultas

Publicado por Viviana (4 intervenciones) el 14/10/2014 23:03:51
En la primera consulta obtengo:

Doc Total
10100 50
10101 120
10102 150
10103 75
10104 250
10105 350

La segunda consulta obtengo

Doc Total
10102 85
10105 20

La union de ambas me da el resultado antes explicado.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar solo los documentos que se repiten en ambas consultas

Publicado por Viviana (4 intervenciones) el 14/10/2014 23:27:40
El motor de base de datos es SQL Server 2008

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Mostrar solo los documentos que se repiten en ambas consultas

Publicado por Isaias (1921 intervenciones) el 14/10/2014 23:45:51
¿En que base de datos? (OK)

¿Cómo fue que desaparecieron estos valores?

10100 50
10101 120
10103 75
10104 250
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar solo los documentos que se repiten en ambas consultas

Publicado por Viviana (4 intervenciones) el 15/10/2014 17:52:31
Los valores no desaparecieron.
Si ejecuto las consultas por serparado, el resultado que obtengo es el que señale en la segunda respuesta.
Cuando junto las consultas con la clausula UNION, obtengo :

Doc Total
10100 50
10101 120
10102 85
10102 150
10103 75
10104 250
10105 20
10105 350


Pero lo que necesito es justamente que desaparezcan o no me muestre:

10100 50
10101 120
10103 75
10104 250

Que son los que no se repiten.

Me explico?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Mostrar solo los documentos que se repiten en ambas consultas

Publicado por leonardo_josue (1173 intervenciones) el 15/10/2014 18:48:30
Hola Viviana:

En realidad, el que pongas un UNION para juntar los resultados en una sola lista, es completamente inútil. Lo que necesitas hacer es un INNER JOIN con tus dos consultas para poder unir aquellos doc que aparezcan en ambas... checa este ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
mysql> SELECT * FROM tabla1;
+-------+-------+
| Doc   | Total |
+-------+-------+
| 10100 |    50 |
| 10101 |   120 |
| 10102 |   150 |
| 10103 |    75 |
| 10104 |   250 |
| 10105 |   350 |
+-------+-------+
6 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla2;
+-------+-------+
| Doc   | Total |
+-------+-------+
| 10102 |    85 |
| 10105 |    20 |
+-------+-------+
2 rows in set (0.00 sec)
 
mysql> SELECT T1.doc, T1.total total1, T2.total total2
    -> FROM tabla1 T1
    -> INNER JOIN tabla2 T2 ON T1.doc = T2.doc;
+-------+--------+--------+
| doc   | total1 | total2 |
+-------+--------+--------+
| 10102 |    150 |     85 |
| 10105 |    350 |     20 |
+-------+--------+--------+
2 rows in set (0.00 sec)

Observa que para fines prácticos, estoy metiendo los resultados de cada una de las consultas en una tabla... pero la idea es la misma. con el INNER JOIN se presentarán sólo aquellos registros que existen en ambas consultas, que es lo que creo que quieres hacer... lo único que faltaría es sustitur el

1
2
3
4
...
FROM tabla1 T1
INNER JOIN tabla2 T2
...


por un

1
2
3
4
...
FROM (Aquí pones tu primer consulta) T1
INNER JOIN (Aquí pones tu segunda consulta) T2
...

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar