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

Problema al Unir consultas

Estas en el tema de Problema al Unir consultas en el foro de SQL Server en Foros del Web. Hola muchachos, de nuevo yo dando que hacer resulta que tengo la siguiente consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT L . NOMBRE   ...
  #1 (permalink)  
Antiguo 19/05/2011, 16:22
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 12 años, 11 meses
Puntos: 1
Problema al Unir consultas

Hola muchachos, de nuevo yo dando que hacer resulta que tengo la siguiente consulta:
Código SQL:
Ver original
  1. SELECT L.NOMBRE
  2.              ,CAST(ISNULL((SELECT SUM(CANTORIG)  FROM MVTRADE WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'OR' GROUP BY PRODUCTO),0) AS DECIMAL)OC_CANTIDAD
  3.              ,CAST(ISNULL((SELECT SUM(VALORUNIT) FROM MVTRADE WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'OR' GROUP BY PRODUCTO),0) AS DECIMAL)OC_EN_$
  4.              ,CAST(ISNULL((SELECT SUM(CANTORIG)  FROM MVTRADE WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'FP' GROUP BY PRODUCTO),0) AS DECIMAL)EJECUTANDO_CANTIDAD
  5.              ,CAST(ISNULL((SELECT SUM(VALORUNIT) FROM MVTRADE WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'FP' GROUP BY PRODUCTO),0) AS DECIMAL)EJECUTANDO_$
  6. FROM MTMERCIA M INNER JOIN MTLINEA L ON M.CODLINEA = L.CODLINEA
  7. WHERE NOMBRE='CINTAS' AND M.CODLINEA LIKE 'ME%'
El cual me arroja lo siguiente:
Código SQL:
Ver original
  1. NOMBRE      OC_CANTIDAD   OC_EN_$      EJECUTANDO     EJECUTANDO_$
  2.  
  3. CINTAS          162000      108           162000         197
  4. CINTAS           48520       68            34120          57
  5. CINTAS          108800      174            98500         238
La idea es que me totalice mostrando solo un registro en este caso 'CITAS' con el respectiva total de sus demas campos, la idea mas logica seria agrupar pero al hacerlo tambien me pide agrupar por el campo 'M.CODIGO' debido a que lo llamo en lo utilizo para filtar en las subconsultas, pero no puedo agrupar por 'M.CODIGO'porque cada CITA que aparece en el registro es de un codigo diferente por lo que me arrojaria los mismos registros repetidos, pense en esto:

Código SQL:
Ver original
  1. --CONSULTA 1
  2.  
  3. SELECT L.NOMBRE,CAST(SUM(CANTORIG)AS DECIMAL)  OC_CANTIDAD
  4. FROM MVTRADE INNER JOIN MTMERCIA M ON PRODUCTO = M.CODIGO
  5.              INNER JOIN MTLINEA L ON M.CODLINEA = L.CODLINEA
  6. WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'OR'
  7. GROUP BY L.NOMBRE;
  8.  
  9. --CONSULTA 2
  10.  
  11. SELECT L.NOMBRE,CAST(SUM(VALORUNIT)AS DECIMAL) OC_EN_$
  12. FROM MVTRADE INNER JOIN MTMERCIA M ON PRODUCTO = M.CODIGO
  13.              INNER JOIN MTLINEA L ON M.CODLINEA = L.CODLINEA
  14. WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'OR'
  15. GROUP BY L.NOMBRE;
  16.  
  17. --CONSULTA 3
  18.  
  19. SELECT L.NOMBRE,CAST(SUM(CANTORIG)AS DECIMAL) EJECUTANDO_CANTIDAD
  20. FROM MVTRADE INNER JOIN MTMERCIA M ON PRODUCTO = M.CODIGO
  21.              INNER JOIN MTLINEA L ON M.CODLINEA = L.CODLINEA
  22. WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'FP'
  23. GROUP BY L.NOMBRE;
  24.  
  25. --CONSULTA 4
  26.  
  27. SELECT L.NOMBRE,CAST(SUM(VALORUNIT)AS DECIMAL) EJECUTANDO_$
  28. FROM MVTRADE INNER JOIN MTMERCIA M ON PRODUCTO = M.CODIGO
  29.              INNER JOIN MTLINEA L ON M.CODLINEA = L.CODLINEA
  30. WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'FP'
  31. GROUP BY L.NOMBRE
  32. ORDER BY NOMBRE;
4 consultas las cuales me arrojan esto respectivamente:

Código SQL:
Ver original
  1. ---CONSULTA 1
  2. NOMBRE                                                          OC_CANTIDAD
  3.  
  4. ACCESORIOS EXTERNOS                                             108675
  5. AMPOLLAS                                                        23784
  6. ANGEOS                                                          5000
  7. BOLSAS CONSUMIBLES                                              50000
  8. BOLSAS PRODUCTO TERMINADO                                       396830
  9. CINTAS                                                          2423490
  10.  
  11. ---CONSULTA 2
  12. NOMBRE                                                           OC_EN_$
  13. ACCESORIOS EXTERNOS                                             811301
  14. AMPOLLAS                                                        0
  15. ANGEOS                                                          11458
  16. BOLSAS CONSUMIBLES                                              13
  17. BOLSAS PRODUCTO TERMINADO                                       5846
  18. CINTAS                                                          725
  19.  
  20. ---CONSULTA 3
  21.  
  22. NOMBRE                                                      EJECUTANDO_CANTIDAD
  23. ACCESORIOS EXTERNOS                                             269346
  24. AMPOLLAS                                                        23784
  25. ANGEOS                                                          4500
  26. BOLSAS CONSUMIBLES                                              50000
  27. BOLSAS PRODUCTO TERMINADO                                       409330
  28. CINTAS                                                          1892290
  29.  
  30.  
  31. ---CONSULTA 4
  32. NOMBRE                                                          EJECUTANDO_$
  33. ACCESORIOS EXTERNOS                                             816946
  34. AMPOLLAS                                                        0
  35. ANGEOS                                                          8993
  36. BOLSAS CONSUMIBLES                                              13
  37. BOLSAS PRODUCTO TERMINADO                                       8312
  38. CINTAS                                                          801

Como pueden ver el el primer campo de las 4 consultas los registros son los mismos mientras que los otros campos son diferentes en cada consulta, la idea es que me quede asi:

Código SQL:
Ver original
  1. NOMBRE                                                          OC_CANTIDAD      OC_EN_$
  2. ACCESORIOS EXTERNOS                                             811301            108675
  3. AMPOLLAS                                                        0                  23784
  4. ANGEOS                                                          11458               5000
  5. BOLSAS CONSUMIBLES                                              13                 50000
  6. BOLSAS PRODUCTO TERMINADO                                       5846              396830
  7. CINTAS                                                          725              2423490

Claro mas los otros dos campos de las dos ultimas consulta (EJECUTANDO_CANTIDAD y EJECUTANDO_$) se que prodria usar la funcion 'pivot', pero no tengo idea de como se maneja, yo prefiero usar 'case', pero tampoco logro con lo deseado..... porfavor si alguien me puede ayudar lo agradeceria fulllll.....
  #2 (permalink)  
Antiguo 20/05/2011, 10:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema al Unir consultas

Hola jahireffer:

No entendí muy bien que es lo que pretendes hacer en la segunda parte de tu post, pero según lo que entendí en la primer parte, tal como mencionas, lo que tienes que hacer es agrupar por Nombre, utilizando al consulta que tienes como una subconsulta. Sería más o menos así:

Código SQL:
Ver original
  1. SELECT * FROM
  2. (
  3. SELECT L.NOMBRE
  4. ,CAST(ISNULL((SELECT SUM(CANTORIG) FROM MVTRADE WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'OR' GROUP BY PRODUCTO),0) AS DECIMAL)OC_CANTIDAD
  5. ,CAST(ISNULL((SELECT SUM(VALORUNIT) FROM MVTRADE WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'OR' GROUP BY PRODUCTO),0) AS DECIMAL)OC_EN_$
  6. ,CAST(ISNULL((SELECT SUM(CANTORIG) FROM MVTRADE WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'FP' GROUP BY PRODUCTO),0) AS DECIMAL)EJECUTANDO_CANTIDAD
  7. ,CAST(ISNULL((SELECT SUM(VALORUNIT) FROM MVTRADE WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'FP' GROUP BY PRODUCTO),0) AS DECIMAL)EJECUTANDO_$
  8. FROM MTMERCIA M INNER JOIN MTLINEA L ON M.CODLINEA = L.CODLINEA
  9. WHERE NOMBRE='CINTAS' AND M.CODLINEA LIKE 'ME%'
  10. ) T
  11. GROUP BY NOMBRE

Sin embargo, a mi entender no hay necesidad de hacer tantas subconsultas y agrupaciones por separado, igual y sería conveniente que nos dijeras cómo es la estructura de tus tablas MTMERCIA, MVTRADE y MTLINEA y que nos pusieras algunos cuantos datos de ejemplo. Es posible que exista alguna otra opción más óptima para hacer lo que quieres.

Saludos
Leo.
  #3 (permalink)  
Antiguo 25/05/2011, 11:56
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problema al Unir consultas

Hola muchachos perdon por demorarme en responder, bueno viejo leo le cuento que intente hacer lo que propusiste pero me dio el mismo resultado, pero te agradezco por tu interes, les cuento que ya pude realizar la consulta que queria y era mas facil de lo que creí, les comento:

En la segunda parte de mi blog, donde no me supe explicar mejor, tengo 4 consultas las cuales me dan 4 resultados independientes, estos resultados los necesito en una unica consulta, debido a que esta consulta la debo alojar en el sistema de tal forma que los usuarios puedan usarla, en fin, si pueden ver las consultas 1 y 2 comparten el mismo filtro en el where y las consultas 3 y 4 tambien, lo que me lleva a poder sacar solo dos consultas asi:


Código SQL:
Ver original
  1. CONSULTA_1
  2.  
  3. SELECT L.NOMBRE,CAST(SUM(CANTORIG)AS DECIMAL)  OC_CANTIDAD, CAST(SUM(VALORUNIT)AS DECIMAL) OC_EN_$
  4. FROM MVTRADE INNER JOIN MTMERCIA M ON PRODUCTO = M.CODIGO
  5.              INNER JOIN MTLINEA L ON M.CODLINEA = L.CODLINEA
  6. WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'OR'
  7. GROUP BY L.NOMBRE

Lo que me aqrroja lo siguiente:

Código SQL:
Ver original
  1. NOMBRE                                                          OC_CAN    OC_$
  2. ACCESORIOS EXTERNOS                                             108675  811301
  3. AMPOLLAS                                                        23784   0
  4. ANGEOS                                                          5000    11458
  5. BOLSAS CONSUMIBLES                                              50000   13
  6. BOLSAS                                                          396830  5846
  7. CINTAS                                                          2423490 725

Código SQL:
Ver original
  1. CONSULTA_2
  2. SELECT L.NOMBRE,CAST(SUM(CANTORIG)AS DECIMAL) EJECUTANDO_CANTIDAD, CAST(SUM(VALORUNIT)AS DECIMAL) EJECUTANDO_$
  3. FROM MVTRADE INNER JOIN MTMERCIA M ON PRODUCTO = M.CODIGO
  4.              INNER JOIN MTLINEA L ON M.CODLINEA = L.CODLINEA
  5. WHERE PRODUCTO = M.CODIGO AND ORIGEN= 'COM' AND TIPODCTO = 'FP'  
  6. GROUP BY L.NOMBRE

La cual me arroja lo siguiente:

Código SQL:
Ver original
  1. NOMBRE                                                        EJE_CAN    EJE_$
  2.  
  3. ACCESORIOS EXTERNOS                                             269346  816946
  4. AMPOLLAS                                                        23784   0
  5. ANGEOS                                                          4500    8993
  6. BOLSAS CONSUMIBLES                                              50000   13
  7. BOLSAS                                                          409330  8312
  8. CINTAS                                                          1892290 801

Entonces lo que hago ahora es crear una vista de cada una de estas consultas y llamo los campos que necesito de ellas asi:


Código SQL:
Ver original
  1. SELECT V.NOMBRE
  2.               ,V.OC_CANTIDAD
  3.               ,V.OC_EN_$
  4.               ,B.EJECUTANDO_CANTIDAD
  5.               ,B.EJECUTANDO_$
  6.               ,(V.OC_EN_$)- (B.EJECUTANDO_$)PENDIENTE_ENTREGA
  7.  
  8. FROM Vista_1 V INNER JOIN vista_2 B ON V.NOMBRE =B.NOMBRE

Y esto me da como salida:

Código SQL:
Ver original
  1. NOMBRE                  OC_CAN    OC_$  EJE_CAN   EJE_$ PEN_ENT
  2.  
  3. ACCESORIOS EXTERNOS    108675   811301  269346  816946  -5645
  4. AMPOLLAS               23784         0   23784       0      0
  5. ANGEOS                  5000     11458    4500    8993   2465
  6. BOLSAS CONSUMIBLES     50000        13   50000      13      0
  7. BOLSAS                 396830     5846  409330    8312  -2466
  8. CINTAS                2423490      725 1892290     801    -76
y es todo compañeros, igual agradezco la intencion, nos vemos pronto

Etiquetas: Ninguno
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 13:54.