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

Consulta para fusionar, dos consultas ya creadas

Estas en el tema de Consulta para fusionar, dos consultas ya creadas en el foro de SQL Server en Foros del Web. En verdad, seria maravilloso que me pudieran ayudar con este inconveniente; agradezco a toda la comunidad y a los creadores por este increible sitio que ...
  #1 (permalink)  
Antiguo 09/06/2011, 21:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 57
Antigüedad: 14 años, 9 meses
Puntos: 1
Consulta para fusionar, dos consultas ya creadas

En verdad, seria maravilloso que me pudieran ayudar con este inconveniente; agradezco a toda la comunidad y a los creadores por este increible sitio que me a sacado mucho de apuros. En fin, tengo estas dos consultas que funcionan perfectamente:
1. Consulta mensual:
Código SQL:
Ver original
  1. SELECT  vtas.periodo,
  2.         vtas.clave_linea,
  3.         vtas.clave_marca,
  4.         vtas.clave_grupo,
  5.         vtas.clave_presentacion,
  6.         vtas.cant_piezas_mes,  
  7.         vtas.cant_litros_mes,  
  8.         vtas.imp_mxp_mes,
  9.         vtas.fecha_actualizacion
  10.     FROM (SELECT
  11.             '201103' AS periodo,
  12.             COALESCE(marcas_agrupadas.linea_ini,sku.clave_linea)  clave_linea,
  13.             COALESCE(marcas_agrupadas.marca_ini,sku.clave_marca) clave_marca,
  14.             COALESCE(marcas_agrupadas.grupo_ini,sku.clave_grupo) clave_grupo,
  15.             sku.clave_presentacion,
  16.             SUM(vtas.ventas_piezas) AS cant_piezas_mes,
  17.             SUM(vtas.ventas_litros) cant_litros_mes,
  18.             SUM(vtas.ventas_mxp) imp_mxp_mes,
  19.             getdate() AS fecha_actualizacion
  20.             FROM RENT_TEMP_VENTAS vtas,
  21.             (SELECT sku.CLAVE_SKU, COALESCE(excep.clave_linea_nvo,sku.CLAVE_LINEA) AS clave_linea,
  22.                 COALESCE(excep.clave_marca_nvo,sku.CLAVE_MARCA) AS clave_marca,
  23.                 COALESCE(excep.clave_grupo_nvo,sku.CLAVE_GRUPO) AS clave_grupo,
  24.                 COALESCE(excep.clave_presentacion_nvo, sku.CLAVE_PRESENTACION) AS clave_presentacion
  25.                 FROM DIM_SKU_HIST sku
  26.                 LEFT OUTER JOIN cat_excepciones_ventas excep
  27.                     ON sku.clave_linea =excep.clave_linea_ant
  28.                     AND sku.clave_marca =excep.clave_marca_ant
  29.                     AND sku.clave_grupo=excep.clave_grupo_ant
  30.                     AND sku.clave_presentacion =excep.clave_presentacion_ant
  31.                     WHERE sku.PERIODO = '201103'
  32.                     AND sku.clave_sku LIKE '19A%') sku
  33.                     LEFT OUTER JOIN
  34.                     (SELECT inicia.clave_linea AS linea_ini, inicia.clave_marca AS marca_ini,
  35.                         inicia.clave_grupo AS grupo_ini ,agrupa.clave_linea, agrupa.clave_marca,
  36.                         agrupa.clave_grupo
  37.                         FROM cat_marcas_iniciales inicia, cat_marcas_agrupadas agrupa
  38.                         WHERE inicia.main_id = agrupa.main_id) marcas_agrupadas
  39.                         ON sku.clave_linea = marcas_agrupadas.clave_linea
  40.                         AND sku.clave_marca = marcas_agrupadas.clave_marca
  41.                         AND sku.clave_grupo = marcas_agrupadas.clave_grupo,
  42.                         rent_control_procesos ctrl
  43.                         WHERE  vtas.fecha >= (SELECT MIN(fecha) FROM dim_tiempo WHERE anio='2011')
  44.                         AND  vtas.fecha <= (SELECT MAX(fecha) FROM dim_tiempo WHERE mes = '201103')
  45.                         AND vtas.clave_sku = sku.clave_sku
  46.                                 AND ctrl.proceso ='VENTAS_RFU_GRUPO'
  47.                                 AND ctrl.tipo_carga = 'SQL'
  48.                                 AND ACTIVO=1
  49.                                 AND COALESCE(marcas_agrupadas.grupo_ini,sku.clave_grupo) <>'99'
  50.                                 AND COALESCE(marcas_agrupadas.linea_ini,sku.clave_linea)='01'
  51.                                 AND COALESCE(marcas_agrupadas.marca_ini,sku.clave_marca)='002'
  52.                                 AND COALESCE(marcas_agrupadas.grupo_ini,sku.clave_grupo)='00'
  53.                                 AND sku.clave_presentacion = '01'
  54.                                 GROUP BY
  55.                                 COALESCE(marcas_agrupadas.linea_ini,sku.clave_linea),
  56.                                 COALESCE(marcas_agrupadas.marca_ini,sku.clave_marca),
  57.                                 COALESCE(marcas_agrupadas.grupo_ini ,sku.clave_grupo),
  58.                                 sku.clave_presentacion) vtas
  59.  
  60.     WHERE  vtas.clave_linea+vtas.clave_marca+vtas.clave_grupo+vtas.clave_presentacion IN
  61.         (SELECT clave_linea+clave_marca+clave_grupo+clave_presentacion
  62.             FROM h_lista_precios_grupo
  63.             WHERE periodo ='201103'
  64.             AND clave_lista_precios NOT LIKE 'LP%')

2.Consulta del acumulado de enero a marzo:
Código SQL:
Ver original
  1. SELECT  vtas2.cant_piezas_acum,
  2.         vtas2.cant_litros_acum,
  3.         vtas2.imp_mxp_acum
  4.     FROM (SELECT
  5.             '201103' AS periodo,
  6.             COALESCE(marcas_agrupadas1.linea_ini,sku1.clave_linea)  clave_linea,
  7.             COALESCE(marcas_agrupadas1.marca_ini,sku1.clave_marca) clave_marca,
  8.             COALESCE(marcas_agrupadas1.grupo_ini,sku1.clave_grupo) clave_grupo,
  9.             sku1.clave_presentacion,
  10.             SUM(vtas1.ventas_piezas) AS cant_piezas_acum,
  11.             SUM(vtas1.ventas_litros) cant_litros_acum,
  12.             SUM(vtas1.ventas_mxp) imp_mxp_acum,
  13.             getdate() AS fecha_actualizacion
  14.             FROM RENT_TEMP_VENTAS vtas1,
  15.             (SELECT sku1.CLAVE_SKU, COALESCE(excep1.clave_linea_nvo,sku1.CLAVE_LINEA) AS clave_linea,
  16.                 COALESCE(excep1.clave_marca_nvo,sku1.CLAVE_MARCA) AS clave_marca,
  17.                 COALESCE(excep1.clave_grupo_nvo,sku1.CLAVE_GRUPO) AS clave_grupo,
  18.                 COALESCE(excep1.clave_presentacion_nvo, sku1.CLAVE_PRESENTACION) AS clave_presentacion
  19.                 FROM DIM_SKU_HIST sku1
  20.                 LEFT OUTER JOIN cat_excepciones_ventas excep1
  21.                     ON sku1.clave_linea =excep1.clave_linea_ant
  22.                     AND sku1.clave_marca =excep1.clave_marca_ant
  23.                     AND sku1.clave_grupo=excep1.clave_grupo_ant
  24.                     AND sku1.clave_presentacion =excep1.clave_presentacion_ant
  25.                     WHERE sku1.clave_sku LIKE '19A%'
  26.                     AND sku1.PERIODO BETWEEN '201101' AND '201103') sku1
  27.                     LEFT OUTER JOIN (SELECT inicia1.clave_linea AS linea_ini, inicia1.clave_marca AS marca_ini,
  28.                                             inicia1.clave_grupo AS grupo_ini ,agrupa1.clave_linea,
  29.                                             agrupa1.clave_marca, agrupa1.clave_grupo
  30.                                         FROM cat_marcas_iniciales inicia1, cat_marcas_agrupadas agrupa1
  31.                                         WHERE inicia1.main_id = agrupa1.main_id) marcas_agrupadas1
  32.                         ON sku1.clave_linea = marcas_agrupadas1.clave_linea
  33.                         AND sku1.clave_marca = marcas_agrupadas1.clave_marca
  34.                         AND sku1.clave_grupo = marcas_agrupadas1.clave_grupo,
  35.                         rent_control_procesos ctrl1
  36.                         WHERE  vtas1.fecha >= (SELECT MIN(fecha) FROM dim_tiempo WHERE anio='2011')
  37.                         AND  vtas1.fecha <= (SELECT MAX(fecha) FROM dim_tiempo WHERE mes BETWEEN '201101' AND '201103')
  38.                                 AND vtas1.clave_sku = sku1.clave_sku
  39.                                 AND ctrl1.proceso ='VENTAS_RFU_GRUPO'
  40.                                 AND ctrl1.tipo_carga = 'SQL'
  41.                                 AND ACTIVO=1
  42.                                 AND COALESCE(marcas_agrupadas1.grupo_ini,sku1.clave_grupo) <>'99'
  43.                                 --and coalesce(marcas_agrupadas1.linea_ini,sku1.clave_linea)='01'
  44.                                 --and coalesce(marcas_agrupadas1.marca_ini,sku1.clave_marca)='002'
  45.                                 --and coalesce(marcas_agrupadas1.grupo_ini,sku1.clave_grupo)='00'
  46.                                 --and sku1.clave_presentacion = '01'
  47.                                 GROUP BY
  48.                                 COALESCE(marcas_agrupadas1.linea_ini,sku1.clave_linea),
  49.                                 COALESCE(marcas_agrupadas1.marca_ini,sku1.clave_marca),
  50.                                 COALESCE(marcas_agrupadas1.grupo_ini ,sku1.clave_grupo),
  51.                                 sku1.clave_presentacion) vtas2
  52.  
  53.     WHERE  vtas2.clave_linea+vtas2.clave_marca+vtas2.clave_grupo+vtas2.clave_presentacion IN
  54.         (SELECT clave_linea+clave_marca+clave_grupo+clave_presentacion
  55.             FROM h_lista_precios_grupo
  56.             WHERE periodo BETWEEN '201101' AND '201103'
  57.             AND clave_lista_precios NOT LIKE 'LP%')

Necesito fusionarlas de manera que el resultado de la consulta final sean las siguientes columnas:

vtas.periodo, vtas.clave_linea, vtas.clave_marca, vtas.clave_grupo,
vtas.clave_presentacion, vtas.cant_piezas_mes, vtas.cant_litros_mes,
vtas.imp_mxp_mes, vtas2.cant_piezas_acum, vtas2.cant_litros_acum,
vtas2.imp_mxp_acum, vtas.fecha_actualizacion

No tengo idea de como hacerlo. Hice la segunda consulta en una vista y funciona bien, pero lo que me preocupa es que ademas todos los between de esta vista, donde tiene '201101' and '201103' se supone que deberia de ir algo como $$YYYYMM and $$YYYYMM que viene de otra tabla llamada dim_tiempo donde se manejan todas las fechas en ese formato. Asi que las intente fusionar y nose si sea el cansancio de que llevo ya una semana en esto o de plano llegue al limite, pero no pude.

Necesito de su ayuda urgente por favor, pues me la est·n pidiendo para ayer...... hoy soy yo, maÒana me toca a mi ayudarlos. Gracias de todo corazon.

Saludos a todos.
Marsh_Spider
  #2 (permalink)  
Antiguo 10/06/2011, 07:48
 
Fecha de Ingreso: febrero-2010
Mensajes: 57
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Consulta para fusionar, dos consultas ya creadas

Por fa..... ayudenmen... please!!!!!
  #3 (permalink)  
Antiguo 14/06/2011, 12:02
 
Fecha de Ingreso: febrero-2011
Ubicación: Peru-Lima-Chorrillos
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta para fusionar, dos consultas ya creadas

Estimado Amigo,

En tus querys trata de utilizar el ANSI normal, para que no tengas problemas a futuro con las fechas, en cambio de versiones o lenguaje.

@pFechaDesde datetime,
@pFechaHasta datetime

Fecha BETWEEN convert(varchar,@pFechaDesde,112) AND convert(varchar,@pFechaHasta,112)

Con respecto a las fusiones tienes las clausulas Union o Union All, puedes hecharle un vistazo al MSN y listo.

Saludos cordiales,
Ronald_Leon_Madrid.
  #4 (permalink)  
Antiguo 14/06/2011, 14:41
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Consulta para fusionar, dos consultas ya creadas

A ver para no desperdiciar tanto codigo de tu consulta... se me ocurre una solucion rapida...

1° hacerle un UNION ALL a tus 2 consultas... CLARO tienes que normalizarlas y darle los mismo CAMPOS... luego que ya normalizaste las COLUMNAS... entonces a las 2 consultas tienes que ponerle los mismas COLUMNAS que son

SELECT vtas.periodo, vtas.clave_linea, vtas.clave_marca, vtas.clave_grupo, vtas.clave_presentacion, vtas.cant_piezas_mes, vtas.cant_litros_mes, vtas.imp_mxp_mes, vtas.cant_piezas_acum, vtas2.cant_litros_acum, vtas2.imp_mxp_acum, vtas.fecha_actualizacion
FROM TABLA .....

en la 1ra consulta a los campos que no tienen le PONES CERO
de igual manera en la segunda consulta... luego haces un UNION ALL de las 2 consultas y luego haces un SELECT de la UNION y un GRUOP BY del SELECT de los campos iguales y un SUM de las columnas que necesitas CONOCER... jajaja espero te funcione...

como te digo es una solucion rapida... saludos,
__________________
Odio verte ir, pero me encanta verte yendo :)
  #5 (permalink)  
Antiguo 16/06/2011, 22:00
 
Fecha de Ingreso: febrero-2010
Mensajes: 57
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Consulta para fusionar, dos consultas ya creadas

Muchísimas gracias a todos!!!!!!

Etiquetas: query
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 22:22.