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

[SOLUCIONADO] Union de las 2 consultas

Estas en el tema de Union de las 2 consultas en el foro de SQL Server en Foros del Web. Hola y de antemano gracias a todos. Tengo esta consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT * FROM (     SELECT COUNT ( ...
  #1 (permalink)  
Antiguo 18/08/2014, 17:36
Avatar de Maverick2786  
Fecha de Ingreso: diciembre-2012
Mensajes: 107
Antigüedad: 11 años, 4 meses
Puntos: 1
Union de las 2 consultas

Hola y de antemano gracias a todos.
Tengo esta consulta:
Código SQL:
Ver original
  1. SELECT *
  2. FROM
  3. (
  4.     SELECT COUNT(contax) AS pama
  5.     FROM
  6.         (SELECT concat(nro_identificacion,tipo_identificacion) AS contax
  7.         FROM formulario_f1
  8.         WHERE concat(nro_identificacion,tipo_identificacion) IN
  9.             (SELECT concat(nro_identificacion,tipo_identificacion)  
  10.             FROM formulario_f1
  11.             WHERE fecha_atencion < '2014-07-01'
  12.             AND (DATEDIFF(DAY,GETDATE(),fecha_nacimiento)/360) <1
  13.             AND sexo=1
  14.             AND instalacion_salud_monitarv_asignada IN (1)
  15.             )
  16.         GROUP BY concat(nro_identificacion,tipo_identificacion)
  17.         HAVING COUNT(concat(nro_identificacion,tipo_identificacion))=1
  18.         ) AS canttot
  19.     ) AS ctot
  20.  
  21. SELECT *
  22. FROM
  23.     (SELECT COUNT(contaa) st
  24.     FROM
  25.         (SELECT concat(nro_identificacion,tipo_identificacion) AS contaa
  26.         FROM formulario_f5 AS f5
  27.         WHERE en_tarv = 2
  28.         AND concat(nro_identificacion,tipo_identificacion) IN
  29.             (SELECT concat(nro_identificacion,tipo_identificacion)  
  30.             FROM formulario_f1
  31.             WHERE fecha_atencion BETWEEN '2000-07-01' AND '2014-07-01'
  32.             AND (DATEDIFF(DAY,GETDATE(),fecha_nacimiento)/360) <1
  33.             AND sexo=1  
  34.             AND instalacion_salud_monitarv_asignada IN (1)
  35.             )
  36.         GROUP BY concat(nro_identificacion,tipo_identificacion)
  37.         HAVING COUNT(concat(nro_identificacion,tipo_identificacion))=1
  38.         ) AS canttarv
  39.     ) AS ctarv

por separado cada uno trae un valor, lo que necesito ponerlo dentro de una misma consulta es decir, que el resultado que me de la consulta sea 2 columnas

Gracias
  #2 (permalink)  
Antiguo 18/08/2014, 18:35
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Union de las 2 consultas

Cita:
Iniciado por Maverick2786 Ver Mensaje
Hola y de antemano gracias a todos.
Tengo esta consulta:
Código SQL:
Ver original
  1. SELECT *
  2. FROM
  3. (
  4.     SELECT COUNT(contax) AS pama
  5.     FROM
  6.         (SELECT concat(nro_identificacion,tipo_identificacion) AS contax
  7.         FROM formulario_f1
  8.         WHERE concat(nro_identificacion,tipo_identificacion) IN
  9.             (SELECT concat(nro_identificacion,tipo_identificacion)  
  10.             FROM formulario_f1
  11.             WHERE fecha_atencion < '2014-07-01'
  12.             AND (DATEDIFF(DAY,GETDATE(),fecha_nacimiento)/360) <1
  13.             AND sexo=1
  14.             AND instalacion_salud_monitarv_asignada IN (1)
  15.             )
  16.         GROUP BY concat(nro_identificacion,tipo_identificacion)
  17.         HAVING COUNT(concat(nro_identificacion,tipo_identificacion))=1
  18.         ) AS canttot
  19.     ) AS ctot
  20.  
  21. SELECT *
  22. FROM
  23.     (SELECT COUNT(contaa) st
  24.     FROM
  25.         (SELECT concat(nro_identificacion,tipo_identificacion) AS contaa
  26.         FROM formulario_f5 AS f5
  27.         WHERE en_tarv = 2
  28.         AND concat(nro_identificacion,tipo_identificacion) IN
  29.             (SELECT concat(nro_identificacion,tipo_identificacion)  
  30.             FROM formulario_f1
  31.             WHERE fecha_atencion BETWEEN '2000-07-01' AND '2014-07-01'
  32.             AND (DATEDIFF(DAY,GETDATE(),fecha_nacimiento)/360) <1
  33.             AND sexo=1  
  34.             AND instalacion_salud_monitarv_asignada IN (1)
  35.             )
  36.         GROUP BY concat(nro_identificacion,tipo_identificacion)
  37.         HAVING COUNT(concat(nro_identificacion,tipo_identificacion))=1
  38.         ) AS canttarv
  39.     ) AS ctarv

por separado cada uno trae un valor, lo que necesito ponerlo dentro de una misma consulta es decir, que el resultado que me de la consulta sea 2 columnas

Gracias
Hola Maverick2786, tenes que usar la sentencia UNION, debajo te armé la query directa para utilizar:

Código SQL:
Ver original
  1. SELECT PAMA , NULL AS ST
  2. FROM
  3. (
  4.     SELECT COUNT(contax) AS pama
  5.     FROM
  6.         (SELECT concat(nro_identificacion,tipo_identificacion) AS contax
  7.         FROM formulario_f1
  8.         WHERE concat(nro_identificacion,tipo_identificacion) IN
  9.             (SELECT concat(nro_identificacion,tipo_identificacion)  
  10.             FROM formulario_f1
  11.             WHERE fecha_atencion < '2014-07-01'
  12.             AND (DATEDIFF(DAY,GETDATE(),fecha_nacimiento)/360) <1
  13.             AND sexo=1
  14.             AND instalacion_salud_monitarv_asignada IN (1)
  15.             )
  16.         GROUP BY concat(nro_identificacion,tipo_identificacion)
  17.         HAVING COUNT(concat(nro_identificacion,tipo_identificacion))=1
  18.         ) AS canttot
  19.     ) AS ctot
  20.  
  21. UNION
  22.  
  23. SELECT NULL AS PAMA, ST
  24. FROM
  25.     (SELECT COUNT(contaa) st
  26.     FROM
  27.         (SELECT concat(nro_identificacion,tipo_identificacion) AS contaa
  28.         FROM formulario_f5 AS f5
  29.         WHERE en_tarv = 2
  30.         AND concat(nro_identificacion,tipo_identificacion) IN
  31.             (SELECT concat(nro_identificacion,tipo_identificacion)  
  32.             FROM formulario_f1
  33.             WHERE fecha_atencion BETWEEN '2000-07-01' AND '2014-07-01'
  34.             AND (DATEDIFF(DAY,GETDATE(),fecha_nacimiento)/360) <1
  35.             AND sexo=1  
  36.             AND instalacion_salud_monitarv_asignada IN (1)
  37.             )
  38.         GROUP BY concat(nro_identificacion,tipo_identificacion)
  39.         HAVING COUNT(concat(nro_identificacion,tipo_identificacion))=1
  40.         ) AS canttarv
  41.     ) AS ctarv

Saludos!

damimg
DBA Specialist
  #3 (permalink)  
Antiguo 19/08/2014, 07:47
Avatar de Maverick2786  
Fecha de Ingreso: diciembre-2012
Mensajes: 107
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Union de las 2 consultas

Muchas Gracias por tu respuesta, solo una pregunta hay alguna forma de que salga pero unicamente los valores y nos los null?
  #4 (permalink)  
Antiguo 19/08/2014, 08:11
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Union de las 2 consultas

si pones un ejemplo del resultado es mas facil saber donde tienes los null, porque si ejecuto ese query en el sql manager no me regresa nada porque "no tengo la estructura de tu base ni tus datos" asi que no se donde estan esos NULL que mencionas.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 20/08/2014, 09:33
Avatar de Maverick2786  
Fecha de Ingreso: diciembre-2012
Mensajes: 107
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Union de las 2 consultas

Si , llevas razon y gracias por la respuesta , lo logre solucionar y me quedo asi:
Código MySQL:
Ver original
  1. select  1 as sexo,'01' as edad,1 as estado ,count(contax) as pama, (select count(contaa) st
  2.         from
  3.             (select distinct concat(nro_identificacion,tipo_identificacion) as contaa
  4.             from formulario_f5 as f5
  5.             where en_tarv = 2
  6.             and fecha_atencion between '2000-01-01' and '2014-08-19'
  7.             and concat(nro_identificacion,tipo_identificacion) in
  8.                 (select distinct concat(nro_identificacion,tipo_identificacion)
  9.                 from formulario_f1
  10.                 where fecha_atencion between '2000-01-01' and '2014-08-19'
  11.                 and (DATEDIFF(now(),fecha_nacimiento)/360) <1
  12.                 and sexo=1
  13.                 and instalacion_salud_monitarv_asignada in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
  14.                 )
  15.             group by concat(nro_identificacion,tipo_identificacion)
  16.             having count(concat(nro_identificacion,tipo_identificacion))=1
  17.             ) as canttarv) as st, (select count(l) as l
  18.             from
  19.                 (select distinct concat(nro_identificacion,tipo_identificacion) as l
  20.                 from formulario_f5 as f5
  21.                 where en_tarv = 1
  22.                 and fecha_atencion between '2000-01-01' and '2014-08-19'
  23.                 and concat(f5.nro_identificacion,f5.tipo_identificacion) in
  24.                     (select distinct concat(f4.nro_identificacion,f4.tipo_identificacion)
  25.                     from formulario_f1 as f1 inner join formulario_f4_f7 as f4
  26.                     on concat(f1.nro_identificacion,f1.tipo_identificacion) = concat(f4.nro_identificacion,f4.tipo_identificacion)
  27.                     where f4.fecha_atencion between '2000-01-01' and '2014-08-19'
  28.                     and (DATEDIFF(now(),fecha_nacimiento)/360) <1
  29.                     and sexo=1
  30.                     and instalacion_salud_monitarv_asignada in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
  31.                     and f4.tipo_esquema_indicado = 1
  32.                     and  concat(f4.nro_identificacion,f4.tipo_identificacion) not in
  33.                         (select distinct concat(f4.nro_identificacion,f4.tipo_identificacion)
  34.                         from formulario_f1 as f1 inner join formulario_f4_f7 as f4
  35.                         on concat(f1.nro_identificacion,f1.tipo_identificacion) = concat(f4.nro_identificacion,f4.tipo_identificacion)
  36.                         where f4.fecha_atencion between '2000-01-01' and '2014-08-19'
  37.                         and (DATEDIFF(now(),fecha_nacimiento)/360) <1
  38.                         and sexo=1
  39.                         and instalacion_salud_monitarv_asignada in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
  40.                         and f4.tipo_esquema_indicado in (2,3)
  41.                         )
  42.                     )
  43.                 group by concat(f5.nro_identificacion,f5.tipo_identificacion)
  44.                 having count(concat(f5.nro_identificacion,f5.tipo_identificacion))=1
  45.                 ) as t1) as l, (select count(ll) as ll
  46.             from
  47.                 (select distinct concat(nro_identificacion,tipo_identificacion) as ll
  48.                 from formulario_f5 as f5
  49.                 where en_tarv = 1
  50.                 and fecha_atencion between '2000-01-01' and '2014-08-19'
  51.                 and concat(f5.nro_identificacion,f5.tipo_identificacion) in
  52.                     (select distinct concat(f4.nro_identificacion,f4.tipo_identificacion)
  53.                     from formulario_f1 as f1 inner join formulario_f4_f7 as f4
  54.                     on concat(f1.nro_identificacion,f1.tipo_identificacion) = concat(f4.nro_identificacion,f4.tipo_identificacion)
  55.                     where f4.fecha_atencion between '2000-01-01' and '2014-08-19'
  56.                     and (DATEDIFF(now(),fecha_nacimiento)/360) <1
  57.                     and sexo=1
  58.                     and instalacion_salud_monitarv_asignada in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
  59.                     and f4.tipo_esquema_indicado = 2
  60.                     and  concat(f4.nro_identificacion,f4.tipo_identificacion) not in
  61.                         (select distinct concat(f4.nro_identificacion,f4.tipo_identificacion)
  62.                         from formulario_f1 as f1 inner join formulario_f4_f7 as f4
  63.                         on concat(f1.nro_identificacion,f1.tipo_identificacion) = concat(f4.nro_identificacion,f4.tipo_identificacion)
  64.                         where f4.fecha_atencion between '2000-01-01' and '2014-08-19'
  65.                         and (DATEDIFF(now(),fecha_nacimiento)/360) <1
  66.                         and sexo=1
  67.                         and instalacion_salud_monitarv_asignada in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
  68.                         and f4.tipo_esquema_indicado=3
  69.                         )
  70.                     )
  71.                 group by concat(f5.nro_identificacion,f5.tipo_identificacion)
  72.                 having count(concat(f5.nro_identificacion,f5.tipo_identificacion))=1
  73.                 ) as t1) as ll, (select count(er) as er
  74.         from
  75.             (select distinct concat(nro_identificacion,tipo_identificacion) as er
  76.             from formulario_f5 as f5
  77.             where en_tarv = 1
  78.             and fecha_atencion between '2000-01-01' and '2014-08-19'
  79.             and concat(f5.nro_identificacion,f5.tipo_identificacion) in
  80.                 (select distinct concat(f4.nro_identificacion,f4.tipo_identificacion)
  81.                 from formulario_f1 as f1 inner join formulario_f4_f7 as f4
  82.                 on concat(f1.nro_identificacion,f1.tipo_identificacion) = concat(f4.nro_identificacion,f4.tipo_identificacion)
  83.                 where f4.fecha_atencion between '2000-01-01' and '2014-08-19'
  84.                 and (DATEDIFF(now(),fecha_nacimiento)/360) <1
  85.                 and sexo=1
  86.                 and instalacion_salud_monitarv_asignada in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
  87.                 and f4.tipo_esquema_indicado = 3
  88.                 )
  89.             group by concat(f5.nro_identificacion,f5.tipo_identificacion)
  90.             having count(concat(f5.nro_identificacion,f5.tipo_identificacion))=1
  91.             ) as t1) as er, -1 as total_status,-1 as total_acumulado
  92.         from (select concat(nro_identificacion,tipo_identificacion) as contax
  93.              from formulario_f1
  94.              where concat(nro_identificacion,tipo_identificacion) in
  95.                 (select concat(nro_identificacion,tipo_identificacion)
  96.                 from formulario_f1
  97.                 where fecha_atencion < '2000-01-01'
  98.                 and (DATEDIFF(now(),fecha_nacimiento)/360) <1
  99.                 and sexo=1
  100.                 and instalacion_salud_monitarv_asignada in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17))
  101.                 group by concat(nro_identificacion,tipo_identificacion)
  102.                 having count(concat(nro_identificacion,tipo_identificacion))=1
  103.             ) as canttot;
  #6 (permalink)  
Antiguo 21/08/2014, 14:37
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: Union de las 2 consultas

¿in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)?

No es mas viable un

between 1 and 17
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 21/08/2014, 14:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Union de las 2 consultas

Cita:
Iniciado por iislas Ver Mensaje
¿in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)?

No es mas viable un

between 1 and 17
No, se ve mas bonito un 1,2,3,4,5,6,7,8,9,10...,17....naaa la verdad da mas flojera escribir todo eso que un between :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 25/08/2014, 11:27
Avatar de Maverick2786  
Fecha de Ingreso: diciembre-2012
Mensajes: 107
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Union de las 2 consultas

jajaja es un ejemplo, tus escojes unas categorias y cada una reprecenta un numero
  #9 (permalink)  
Antiguo 27/08/2014, 13:42
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: Union de las 2 consultas

realmente lo REPRECENTA?
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 29/08/2014, 10:54
Avatar de Maverick2786  
Fecha de Ingreso: diciembre-2012
Mensajes: 107
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Union de las 2 consultas

Lo siento, representa

Etiquetas: columna, select, union
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 01:12.