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

Problema con consulta anidada

Estas en el tema de Problema con consulta anidada en el foro de Mysql en Foros del Web. Hola a todos como estas veran tengo el siguiente problema tengo que hacer que mi consulta me muestre algo asi @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver ...
  #1 (permalink)  
Antiguo 21/01/2016, 09:37
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 1 mes
Puntos: 2
Problema con consulta anidada

Hola a todos como estas veran tengo el siguiente problema tengo que hacer que mi consulta me muestre algo asi
Código HTML:
Ver original
  1. Responsable Rojo    Naranja Blanco
  2. Ursula            5    4              3
  3. CCI                     2      3              4
  4. PCP                    4       2              1
  5. Hilda                  6       7             10
  6. CCIII                    6      4               5
  7. PCJ                    5      6                7
Y para ello hice dos consultas por separado y luego las uni para obtener el resulta que muestro arriba pero me muestra unos errores
Código MySQL:
Ver original
  1. SELECT Reponsable   =   CASE    orden
  2. WHEN 1 THEN Responsable
  3. WHEN 2 THEN Descripcion
  4. Blanco, Naranjas,   Rojo
  5. FROM (SELECT CONCAT(jc_usuario_nombre,' ',jc_usuario_apellidos) AS Responsable,
  6. sp.jc_servicio_descripcion  AS Descripcion,
  7. (SELECT COUNT(1) FROM seg_pap WHERE seg_estatus_id IN(9,10,11) AND jc_usuario_id = sgc.jc_usuario_id
  8. AND 3 <= DATEDIFF(seg_pap_fecha_proximo_contac,NOW())) Blanco,
  9. (SELECT COUNT(*) FROM seg_pap
  10. WHERE seg_estatus_id IN (9,10,11) AND jc_usuario_id = sgc.jc_usuario_id
  11. AND 1 <= DATEDIFF(seg_pap_fecha_proximo_contac,NOW())
  12. AND DATEDIFF(seg_pap_fecha_proximo_contac,NOW()) <=2) Naranjas,
  13. (SELECT COUNT(*) FROM seg_pap
  14. WHERE seg_estatus_id IN (9,10,11) AND jc_usuario_id = sgc.jc_usuario_id
  15. AND DATEDIFF(seg_pap_fecha_proximo_contac,NOW()) <=0) Rojo,
  16. sgc.jc_usuario_id   AS Usuario_Id,
  17. orden = 1
  18. FROM seg_pap sgc
  19. INNER JOIN usuarios_crm us ON sgc.jc_usuario_id = us.jc_usuario_id
  20. JOIN (seg_pap_servicio sps LEFT JOIN servicio sp ON sp.jc_servicio_id = sps.jc_servicio_id)
  21. WHERE sps.jc_servicio_id
  22. GROUP BY jc_usuario_nombre, jc_usuario_apellidos, sgc.jc_usuario_id
  23. SELECT CONCAT(jc_usuario_nombre,' ',jc_usuario_apellidos) AS Responsable,
  24. sp.jc_servicio_descripcion  AS Descripcion,
  25. (SELECT COUNT(*) FROM seg_pap spgc , seg_pap_servicio spg
  26. WHERE seg_estatus_id IN(9,10,11) AND spg.jc_servicio_id = sps.jc_servicio_id AND spg.seg_pap_id = spgc.seg_pap_id
  27. AND spgc.jc_usuario_id = sgc.jc_usuario_id AND 3 <= DATEDIFF(seg_pap_fecha_proximo_contac,NOW())) Blanco,
  28. (SELECT COUNT(*) FROM seg_pap spgc , seg_pap_servicio spg
  29. WHERE seg_estatus_id IN (9,10,11) AND spg.jc_servicio_id = sps.jc_servicio_id AND spg.seg_pap_id = spgc.seg_pap_id
  30. AND spgc.jc_usuario_id = sgc.jc_usuario_id AND 1 <= DATEDIFF(seg_pap_fecha_proximo_contac,NOW())
  31. AND DATEDIFF(seg_pap_fecha_proximo_contac,NOW()) <=2 ) Naranja,
  32. (SELECT COUNT(*) FROM seg_pap spgc , seg_pap_servicio spg
  33. WHERE seg_estatus_id IN (9,10,11) AND spg.jc_servicio_id = sps.jc_servicio_id AND spg.seg_pap_id = spgc.seg_pap_id
  34. AND spgc.jc_usuario_id = sgc.jc_usuario_id
  35. AND DATEDIFF(seg_pap_fecha_proximo_contac,NOW()) <=0 )Rojo,
  36. sgc.jc_usuario_id,
  37. orden = 2
  38. FROM    seg_pap sgc
  39. INNER JOIN  usuarios_crm us ON sgc.jc_usuario_id = us.jc_usuario_id
  40. JOIN(seg_pap_servicio sps LEFT JOIN servicio sp ON sp.jc_servicio_id = sps.jc_servicio_id)
  41. GROUP BY sp.jc_servicio_descripcion,sps.jc_servicio_id, sgc.jc_usuario_id) dato
  42. ORDER BY dato.Usuario_Id ASC, dato.orden ASC
cada vez que ejecuto esta consulta me muestra error aqui
Código MySQL:
Ver original
  1. /* Error de SQL (1054): Unknown column 'orden' in 'field list' */
  #2 (permalink)  
Antiguo 21/01/2016, 09:58
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Problema con consulta anidada

Muéstranos la estructura de las tablas utilizadas
  #3 (permalink)  
Antiguo 21/01/2016, 10:02
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 1 mes
Puntos: 2
Respuesta: Problema con consulta anidada

Tabla seg_pap
Código MySQL:
Ver original
  1. CREATE TABLE `seg_pap` (
  2.     `seg_pap_id` INT(11) NOT NULL AUTO_INCREMENT,
  3.     `jc_usuario_id` INT(11) NULL DEFAULT NULL,
  4.     `jc_empresa_id` INT(11) NULL DEFAULT NULL,
  5.     `jc_contacto_id` INT(11) NULL DEFAULT NULL,
  6.     `jc_actividad_id` INT(11) NULL DEFAULT NULL,
  7.     `seg_estatus_id` INT(11) NULL DEFAULT NULL,
  8.     `seg_referencia_id` INT(11) NULL DEFAULT NULL,
  9.     `seg_pap_fecha_requerimiento` DATE NULL DEFAULT NULL,
  10.     `seg_pap_fecha_ultimo_contac` DATE NULL DEFAULT NULL,
  11.     `seg_pap_fecha_proximo_contac` DATE NULL DEFAULT NULL,
  12.     `jc_unidad_negocio_id` INT(11) NULL DEFAULT NULL,
  13.     `seg_pap_observaciones` VARCHAR(500) NULL DEFAULT NULL,
  14.     PRIMARY KEY (`seg_pap_id`),
  15.     INDEX `seguimiento_pap_usuario` (`jc_usuario_id`),
  16.     INDEX `seguimiento_pap_contacto` (`jc_contacto_id`),
  17.     INDEX `seguimiento_pap_estatus` (`seg_estatus_id`),
  18.     INDEX `seguimiento_pap_unidad_negocio` (`jc_unidad_negocio_id`),
  19.     INDEX `seguimiento_pap_actividad` (`jc_actividad_id`),
  20.     INDEX `seguimiento_pap_referencia` (`seg_referencia_id`),
  21.     INDEX `seguimiento_pap_contacto_empresa` (`jc_empresa_id`),
  22.     CONSTRAINT `seguimiento_pap_actividad` FOREIGN KEY (`jc_actividad_id`) REFERENCES `seg_actividad` (`jc_actividad_id`),
  23.     CONSTRAINT `seguimiento_pap_contacto` FOREIGN KEY (`jc_contacto_id`) REFERENCES `contacto` (`jc_contacto_id`),
  24.     CONSTRAINT `seguimiento_pap_contacto_empresa` FOREIGN KEY (`jc_empresa_id`) REFERENCES `contacto` (`jc_empresa_id`) ON UPDATE CASCADE,
  25.     CONSTRAINT `seguimiento_pap_estatus` FOREIGN KEY (`seg_estatus_id`) REFERENCES `seg_estatus` (`seg_estatus_id`),
  26.     CONSTRAINT `seguimiento_pap_referencia` FOREIGN KEY (`seg_referencia_id`) REFERENCES `seg_referencia` (`seg_referencia_id`),
  27.     CONSTRAINT `seguimiento_pap_unidad_negocio` FOREIGN KEY (`jc_unidad_negocio_id`) REFERENCES `unidad_negocio` (`jc_unidad_negocio_id`),
  28.     CONSTRAINT `seguimiento_pap_usuario` FOREIGN KEY (`jc_usuario_id`) REFERENCES `usuarios_crm` (`jc_usuario_id`)
  29. )
  30. COLLATE='utf8_general_ci'
  31. ;
Tabla seg_pap_servicio
Código MySQL:
Ver original
  1. CREATE TABLE `seg_pap_servicio` (
  2.     `seg_pap_id` INT(11) NULL DEFAULT NULL,
  3.     `jc_servicio_id` INT(11) NULL DEFAULT NULL,
  4.     `seg_pap_valor_venta` DECIMAL(15,0) NULL DEFAULT NULL,
  5.     INDEX `seguimiento_pap_servicio` (`jc_servicio_id`),
  6.     INDEX `seguimiento_pap_id` (`seg_pap_id`),
  7.     CONSTRAINT `seguimiento_pap_id` FOREIGN KEY (`seg_pap_id`) REFERENCES `seg_pap` (`seg_pap_id`),
  8.     CONSTRAINT `seguimiento_pap_servicio` FOREIGN KEY (`jc_servicio_id`) REFERENCES `servicio` (`jc_servicio_id`)
  9. )
  10. COLLATE='utf8_general_ci'
  11. ;
y por utlimo la tabla servicio
Código MySQL:
Ver original
  1. CREATE TABLE `servicio` (
  2.     `jc_servicio_id` INT(11) NOT NULL AUTO_INCREMENT,
  3.     `jc_unidad_negocio_id` INT(11) NULL DEFAULT NULL,
  4.     `jc_servicio_descripcion` VARCHAR(30) NULL DEFAULT NULL,
  5.     PRIMARY KEY (`jc_servicio_id`),
  6.     INDEX `servicio_unidad_negocio` (`jc_unidad_negocio_id`),
  7.     CONSTRAINT `servicio_unidad_negocio` FOREIGN KEY (`jc_unidad_negocio_id`) REFERENCES `unidad_negocio` (`jc_unidad_negocio_id`)
  8. )
  9. COLLATE='utf8_general_ci'
  10. ;
Gracias por la atención prestada al tema
  #4 (permalink)  
Antiguo 21/01/2016, 10:32
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Problema con consulta anidada

Esta un poco desordenada la consulta SQL pero creo que cuando haces el

Código SQL:
Ver original
  1. SELECT Reponsable   =   CASE    orden
  2. WHEN 1 THEN Responsable
  3. WHEN 2 THEN Descripcion
  4. END......

o el

Código SQL:
Ver original
  1. ORDER BY dato.Usuario_Id ASC, dato.orden ASC

Es donde no esta el orden... por que en tus SELECT anidados internos jamás 'tiras' la columna orden hacía el SELECT principal
  #5 (permalink)  
Antiguo 21/01/2016, 10:51
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 1 mes
Puntos: 2
Respuesta: Problema con consulta anidada

Claro porque orden no es una columna de alguna tabla, ese lo estoy asignando al CASE pero no se si es que esta bien o no como estoy haciendo mi consulta

Gracias
  #6 (permalink)  
Antiguo 21/01/2016, 12:09
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Problema con consulta anidada

Si aún no te resulta copiame la estructura de usuarios_crm para poder replicar la consulta
  #7 (permalink)  
Antiguo 21/01/2016, 12:12
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 1 mes
Puntos: 2
Respuesta: Problema con consulta anidada

Muchas gracias por tu atencion aqui mi tabla
usuarios
Código MySQL:
Ver original
  1. CREATE TABLE `usuarios_crm` (
  2.     `jc_usuario_id` INT(11) NOT NULL AUTO_INCREMENT,
  3.     `jc_rol_id` INT(11) NULL DEFAULT '0',
  4.     `jc_usuario_correo` VARCHAR(50) NULL DEFAULT NULL,
  5.     `jc_usuario_password` VARCHAR(15) NULL DEFAULT NULL,
  6.     `jc_usuario_nombre` VARCHAR(100) NULL DEFAULT NULL,
  7.     `jc_usuario_apellidos` VARCHAR(100) NULL DEFAULT NULL,
  8.     `jc_usuario_telefono` DECIMAL(20,0) NULL DEFAULT NULL,
  9.     PRIMARY KEY (`jc_usuario_id`),
  10.     INDEX `usuario_rol` (`jc_rol_id`),
  11.     CONSTRAINT `usuario_rol` FOREIGN KEY (`jc_rol_id`) REFERENCES `roles_crm` (`jc_rol_id`)
  12. )
  13. COLLATE='utf8_general_ci'
  14. ;
  #8 (permalink)  
Antiguo 21/01/2016, 12:39
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Problema con consulta anidada

El problema es que MYSQL no soporta variables como SQL SERVER donde sí funciona

Código SQL:
Ver original
  1. SELECT orden = 1

tendrás que sustituir el orden = 1 por 1 as orden, ve si te funciona así... lo mismo con el case del primer select con Reponsable
  #9 (permalink)  
Antiguo 21/01/2016, 12:51
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 1 mes
Puntos: 2
Respuesta: Problema con consulta anidada

Lo cambie asi
Código MySQL:
Ver original
  1. 1 AS orden
en el caso del primer select no entiendo como
Código MySQL:
Ver original
  1. SELECT Reponsable   =   CASE    orden
  2. WHEN 1 THEN Responsable
  3. WHEN 2 THEN Descripcion
porque ahora me muestra este error que es creo que es dentro del select
Código MySQL:
Ver original
  1. /* Error de SQL (1054): Unknown column 'Reponsable' in 'field list' */
  #10 (permalink)  
Antiguo 21/01/2016, 12:56
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Problema con consulta anidada

Debe ser
Código MySQL:
Ver original
  1. SELECT CASE    orden
  2. WHEN 1 THEN Responsable
  3. WHEN 2 THEN Descripcion
  4. END as Reponsable

Etiquetas: fecha, join, select, sql
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 17:29.