Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Unir consultas !!!!!

Estas en el tema de Unir consultas !!!!! en el foro de SQL Server en Foros del Web. Ola! tengo un problema con tres consultas: cada una es de diferente tabla... lo que quiero hacer es unir las tres para luego hacer un ...
  #1 (permalink)  
Antiguo 11/03/2010, 14:01
 
Fecha de Ingreso: febrero-2010
Mensajes: 31
Antigüedad: 14 años, 2 meses
Puntos: 0
Exclamación Unir consultas !!!!!

Ola!
tengo un problema con tres consultas: cada una es de diferente tabla...

lo que quiero hacer es unir las tres para luego hacer un informe de la resultante.

estas son las consultas :
Código SQL:
Ver original
  1. SELECT id_cil, tip_cil, ref_cil, gran, pes_cil, tara, cil_ent,
  2.  num_plan,tot_pes,nom_gran,(SELECT SUM(pes_cil)FROM Entrega),(SELECT COUNT (id_cil)FROM Entrega)
  3. FROM
  4.   Entrega AS E, Planilla AS P,Granja AS G
  5. WHERE
  6.   E.num_plan = P.id_plan AND E.gran=G.id_gran AND
  7.   P.fec_ent_plan
--------------------------------------------------------------------------------------------------------
Código SQL:
Ver original
  1. SELECT id_cil, tip_cil, ref_cil, gran, pes_cil, tara, cil_ent,            
  2.  num_plan,tot_pes,nom_gran,(SELECT COUNT (id_cil) FROM Vacios)
  3. FROM
  4.   Llenos AS E, Planilla AS P,Granja AS G
  5. WHERE
  6.   E.num_plan = P.id_plan AND E.gran=G.id_gran AND
  7.   P.fec_ent_plan
--------------------------------------------------------------------------------------------------------
Código SQL:
Ver original
  1. SELECT id_cil, tip_cil, ref_cil, gran, pes_cil, tara, cil_vac,            
  2. num_plan,tot_pes,nom_gran,(SELECT COUNT (id_cil) FROM Vacios)
  3. FROM
  4.   Vacios AS E, Planilla AS P,Granja AS G
  5. WHERE
  6.   E.num_plan = P.id_plan AND E.gran=G.id_gran AND
  7.   P.fec_ent_plan

espero que puedan ayudarme...... recuerden que quiero que las tres queden en una sola.... gracias
  #2 (permalink)  
Antiguo 11/03/2010, 14:09
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Unir consultas !!!!!

Has probado con UNION ALL?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 11/03/2010, 14:14
Avatar de dalyla  
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: Unir consultas !!!!!

Si usa el Union all, pero segun lo que quieras puedes usar solo Union, ya que uno de los dos no recuerdo cual, te quita las repeticiones, ademas veo que usas el where, en ves de usar el Left join, right join o inner join, te recomiendo que busques esto.

Código SQL:
Ver original
  1. SELECT id_cil, tip_cil, ref_cil, gran, pes_cil, tara, cil_vac,             num_plan,tot_pes,nom_gran,(SELECT COUNT (id_cil) FROM Vacios)
  2. FROM   Vacios AS E
  3. LEFT JOIN Planilla AS P ON E.num_plan = P.id_plan
  4. LEFT JOIN Granja AS G ON E.gran=G.id_gran
  5. AND  P.fec_ent_plan  //<- esto no lo entiendo

En fin yo lo haria de esta manera, o segun lo que necesites seria un inner join, o un right join
__________________
Ayudar a mejorar a los demas, es hacerte mejor a ti mismo ; )
  #4 (permalink)  
Antiguo 11/03/2010, 14:14
 
Fecha de Ingreso: febrero-2010
Mensajes: 31
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Unir consultas !!!!!

Oye pero me puedes dar algun ejemplo de como hacerlo????
gracias
  #5 (permalink)  
Antiguo 11/03/2010, 14:21
 
Fecha de Ingreso: febrero-2010
Mensajes: 31
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Unir consultas !!!!!

Como hago el union all????
  #6 (permalink)  
Antiguo 11/03/2010, 14:58
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Unir consultas !!!!!

Simplemente pones UNION ALL entre cada una de tus consultas.
Por ejemplo:
Código SQL:
Ver original
  1. SELECT * FROM tabla
  2. UNION ALL
  3. SELECT * FROM tabla2
  4. UNION ALL
  5. SELECT * FROM tabla3
Si pones UNION, no se repetiran los registros.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 12/03/2010, 07:12
 
Fecha de Ingreso: febrero-2010
Mensajes: 31
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Unir consultas !!!!!

Ola!
hice la consulta de la siguiente manera:
Código SQL:
Ver original
  1. SELECT Llenos.gran AS ID,Granja.nom_gran AS NOMBRE,Llenos.num_plan AS PLANILLA,
  2. Lote.id_lot AS LOTE,Llenos.cil_ent AS 'TOTAL CILINDROS',
  3. (SELECT SUM(pes_cil)FROM Llenos) AS 'PESO B.RETIRO',(SELECT SUM(pes_cil)FROM Llenos) AS 'PESO NO COSUMIDO',Planilla.num_com_plan AS 'O.COMPRA'
  4. FROM Llenos,Planilla,Granja,Lote
  5. WHERE id_plan=num_plan AND id_gran=gran
  6. UNION
  7. SELECT Entrega.gran AS ID,Granja.nom_gran AS NOMBRE,Entrega.num_plan AS PLANILLA,
  8. Lote.id_lot AS LOTE,Entrega.cil_ent AS 'TOTAL CILINDROS',
  9. (SELECT SUM(pes_cil)FROM Entrega) AS 'PESO B.RETIRO',(SELECT SUM(pes_cil)FROM Entrega)
  10. AS 'PESO NO COSUMIDO',Planilla.num_com_plan AS 'O.COMPRA' FROM Entrega,Planilla,Granja,Lote
  11. WHERE id_plan=num_plan AND id_gran=gran AND
  12. Planilla.fec_ent_plan={?FECHA}
  13. UNION
  14. SELECT Vacios.gran AS ID,Granja.nom_gran AS NOMBRE,Vacios.num_plan AS PLANILLA,
  15. Lote.id_lot AS LOTE,Vacios.cil_vac AS 'TOTAL CILINDROS',
  16. (SELECT SUM(pes_cil)FROM Vacios) AS 'PESO B.RETIRO',(SELECT SUM(pes_cil)FROM Vacios)
  17. AS 'PESO NO COSUMIDO',Planilla.num_com_plan AS 'O.COMPRA' FROM Vacios,Planilla,Granja,Lote
  18. WHERE id_plan=num_plan AND id_gran=gran

pero al ir a la vista previa del informe me sale el siguiente mensaje, y no muestra ningun dato en el reporte :

"Esta seccion de grupo no se puede imprimir porque su campo de condición no existe o no es valido.Dar formato a la seccion para elegir otro campo de condicion"
  #8 (permalink)  
Antiguo 12/03/2010, 17:00
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Unir consultas !!!!!

¿Planilla.fec_ent_plan={?FECHA}?......esto no creo que funcione.
  #9 (permalink)  
Antiguo 16/03/2010, 15:51
 
Fecha de Ingreso: febrero-2010
Mensajes: 31
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Unir consultas !!!!!

mmmm eso no tiene tanta importancia !!! es un parametro de fecha que le puse en el reporte...
  #10 (permalink)  
Antiguo 16/03/2010, 16:41
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Unir consultas !!!!!

Has probado con la propuesta de dalyla?
De repente es mejor rehacer tu query.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #11 (permalink)  
Antiguo 18/03/2010, 11:45
Avatar de dalyla  
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: Unir consultas !!!!!

Las uniones que haces con el where deberias usarlas con el inner, left, right join, yo diria que es la maner correcta; para acortar tus querys deberias usar algo como

Código MySQL:
Ver original
  1. Select ... sum(lp.pes_cil) AS 'PESO B.RETIRO'
  2. From LLenos l
  3. Left join Planilla p l.num_plan=p.id_plan
  4. join Llenos as lp

Te recomiendo probar las querys separadas del UNION porque el problema no creo que sea en la union si no en la query sola. o reconstruye tu query como menciona iislas
__________________
Ayudar a mejorar a los demas, es hacerte mejor a ti mismo ; )

Última edición por dalyla; 18/03/2010 a las 11:47 Razón: me falto..
  #12 (permalink)  
Antiguo 18/03/2010, 19:53
 
Fecha de Ingreso: enero-2010
Ubicación: SJM Lima - Peru
Mensajes: 55
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Unir consultas !!!!!

Cita:
Iniciado por tatis003 Ver Mensaje
Ola!
tengo un problema con tres consultas: cada una es de diferente tabla...

lo que quiero hacer es unir las tres para luego hacer un informe de la resultante.

estas son las consultas :
Código SQL:
Ver original
  1. SELECT id_cil, tip_cil, ref_cil, gran, pes_cil, tara, cil_ent,
  2.  num_plan,tot_pes,nom_gran,(SELECT SUM(pes_cil)FROM Entrega),(SELECT COUNT (id_cil)FROM Entrega)
  3. FROM
  4.   Entrega AS E, Planilla AS P,Granja AS G
  5. WHERE
  6.   E.num_plan = P.id_plan AND E.gran=G.id_gran AND
  7.   P.fec_ent_plan
--------------------------------------------------------------------------------------------------------
Código SQL:
Ver original
  1. SELECT id_cil, tip_cil, ref_cil, gran, pes_cil, tara, cil_ent,            
  2.  num_plan,tot_pes,nom_gran,(SELECT COUNT (id_cil) FROM Vacios)
  3. FROM
  4.   Llenos AS E, Planilla AS P,Granja AS G
  5. WHERE
  6.   E.num_plan = P.id_plan AND E.gran=G.id_gran AND
  7.   P.fec_ent_plan
--------------------------------------------------------------------------------------------------------
Código SQL:
Ver original
  1. SELECT id_cil, tip_cil, ref_cil, gran, pes_cil, tara, cil_vac,            
  2. num_plan,tot_pes,nom_gran,(SELECT COUNT (id_cil) FROM Vacios)
  3. FROM
  4.   Vacios AS E, Planilla AS P,Granja AS G
  5. WHERE
  6.   E.num_plan = P.id_plan AND E.gran=G.id_gran AND
  7.   P.fec_ent_plan

espero que puedan ayudarme...... recuerden que quiero que las tres queden en una sola.... gracias

Hola tatis
Sinceramente no soy fanatico del Union pero como todo tiene su razon de ser y al final lo que haces creas una consulta con 30 reg por ejemplo con 10 campos si le aplicas union debes primero tener otra consulta con 10 campos y el resultado de registros se inserta al final por decir 15 entonces tendriamos 45 registros y 10 columnas para nuestra consulta resultado y si asi sigues uniendo tablas aumentara la cantidad del select como resultado.

En Cambio lo que yo haria quizas no para este caso pero crearia una funcion con N parametros de ingreso y un tipo de resultado que lo ire agregando dentro de mi consulta como un campo adicional pero eso tambien va en funcion al uso o al resultado que se desee.

Hay que distinguir el crecimiento de la consulta ya sea horizontal o Vertical.

como igualas el resultado de la tablas (entrega, lleno y vacios)
P.id_plan no entendia como te darias cuenta en donde empieza el resultado de una u otro union ya que al final toman como nombre de cabecera el cual se coloco en la primera consulta y sinceramente yo no sabria donde empieza o donde termina cada una de las consultas por eso te envio este ejemplo


y mi campoX de las funciones llamadas en el select seria el valor de p.idPlan para tu caso.

Bueno te lo dejo a tu criterio y suerte abajo te dejo mis datos por si tiens cualquier duda.

Código SQL:
Ver original
  1. CREATE FUNCTION f_JalarDatos
  2.     (@tabla INT,
  3.     @tipo INT,
  4.     @valor INT
  5.     )
  6.     RETURN INT
  7.     AS
  8.     BEGIN
  9.        DECLARE @xreturn INT
  10.        IF @tabla=1
  11.         BEGIN
  12.            IF @tipo=1
  13.             SELECT @xreturn= COUNT(*) FROM tabla1 WHERE campo=@valor
  14.            ELSE
  15.             SELECT @xreturn= SUM(*) FROM tabla1 WHERE campo=@valor
  16.             END
  17.        IF @tabla=2
  18.         BEGIN
  19.            IF @tipo=1
  20.             SELECT @xreturn= COUNT(*) FROM tabla2 WHERE campo=@valor
  21.            ELSE
  22.             SELECT @xreturn= SUM(*) FROM tabla2 WHERE campo=@valor
  23.             END
  24.     END
  25.  
  26.  
  27. SELECT idx, campo2, campo3 ,
  28.     dbo.f_JalarDatos(1,1,campoX) AS CantidadX,
  29.     dbo.f_JalarDatos(1,2,campoX) AS SumaX ,
  30.     dbo.f_JalarDatos(2,1,campoX) AS CantidadY,
  31.     dbo.f_JalarDatos(2,2,campoX) AS SumaY ,
  32.     dbo.f_JalarDatos(3,1,campoX) AS CantidadZ,
  33.     dbo.f_JalarDatos(3,2,campoX) AS SumaZ
  34.     FROM tabla1 T1 INNER JOIN TABLA2 T2 ON T1.IDx=T2.IDx WHERE campo=xxxxxxx

www.bitxense.com.pe | Soluciones Informaticas S.A.C. - [email protected]
Cualquier duda soy Jhon Bautista Palomino aqui esta mi correo [email protected] Lima-Peru

Etiquetas: unir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:52.