![]() |
¿Se puede en Oracle en un select poner dos count con distinto where? Imaginad que quiero hacer un count, según determinadas condiciones, y otro count según otras. ¿Puedo obtenerlo todo con una misma instrucción? Sí se puede cuando de lo que se habla es del distinct, que te permite tenerlo al lado de un count y cada cual contará lo suyo, ¿pero se pueden poner dos count que se basen en distinta where? (tal vez para ello habría que realizar dos selects, y "unirlas" de algún modo para que fueran dos columnas (si utilizas union sería como registros distintos)). Gracias |
Re: ¿Se puede en Oracle en un select poner dos count con distinto where? Imagino que la forma de hacerlo únicamente pasa por realizar una JOIN de las dos select's distintas. ¿Y cómo se realiza una JOIN de dos selects? Cuando no me da error porque "no es un nombre de tabla válido", me lo da por asignarle incorrectamente el alias. |
Re: ¿Se puede en Oracle en un select poner dos count con distinto where? Aquí se cuentan dos campos (distintos o no) CAMPO1 y CAMPO2 de una misma tabla TBL_01 dependiendo de condiciones distintas condicion1 y condicion2: Código: SELECT Un saludo. |
Re: ¿Se puede en Oracle en un select poner dos count con distinto where? Hola a todos, soy nueva en esto del pl/sql, y tengo la misma duda que programadornet. He probado las soluciones que habeis dado y no me funcionan o no las he sabido aplicar. Mi problema es el siguiente: tengo una tabla con los siguientes atributos: grupo, canal,prioridad, mes, año para cada grupo y canal debo obtener el numero de filas con prioridad alta y el total de filas que hay. Debo de tener en cuenta que existen filas con valores nulos para el canal y tambien debo recogerlos ejemplo: grupo canal prioridad alta total -------- --------- ------------------- --------- grupo1 teléfono 117 200 grupo1 email 3 10 grupo1 chat 35 98 grupo1 20 50 He hecho: SELECT grupo, canal, COUNT(*) AS "CAMPO1", (select count(*) from incidencias where mes = 2 and ano= 2008 and grupo=2 group by grupo, canal ) AS "CAMPO2" FROM incidencias where prioridad=2 and mes = 2 and ano= 2008 and grupo=2 group by grupo, canal Pero no me funciona. Me sale el siguiente error: ORA-01427: la subconsulta de una sola fila devuelve más de una fila Gracias |
Re: ¿Se puede en Oracle en un select poner dos count con distinto where? Hola Pukas. En tu caso particular, no tienes por qué poner el GROUP BY en tu subselect. Cita:
Sería algo así: Código: SELECT grupo, canal, |
Re: ¿Se puede en Oracle en un select poner dos count con distinto where? Gracias Osirapi, pero como tu decias no es lo q estoy buscando. Pensé en crear dos funciones: Una para obtener un count() con prioridad=2 create or replace FUNCTION fn_Obtener_prioridad_canal(n_nivel number,n_canal number, n_mes number,n_ano number) RETURN NUMBER IS result number; begin select count(*) into result from incidencias where grupo(+) = grupo and canal(+) = canal and prioridad(+)=prioridad and prioridad=2 and mes = n_mes and ano= n_ano and grupo=n_nivel and canal=n_canal group by grupo,canal; return( result); EXCEPTION WHEN NO_DATA_FOUND THEN return 0; END fn_Obtener_prior_canal; y otro para obtener el count() total create or replace FUNCTION fn_Obtener_total_canal(n_nivel number,n_canal number, n_mes number, n_ano number) RETURN NUMBER IS result number; begin select count(*) into result from incidencias where grupo(+) = grupo and canal(+) = canal and prioridad(+)=prioridad and mes = n_mes and ano= n_ano and grupo=n_nivel and canal=n_canle group by grupo,canal; return( result); EXCEPTION WHEN NO_DATA_FOUND THEN return 0; END fn_Obtener_total_canal; luego llamaría a las dos funciones desde otro select: select distinct grupo, canal, nvl(fn_Obtener_prior_canal(grupo,canal, mes,ano),0) as "Nº Críticos", nvl(fn_Obtener_total_canal(grupo,canal,mes,ano),0) as "Nº Total" from incidencias where grupo(+) = grupo and canal(+) = canal and mes =2 and ano=2008 and grupo=2 pero no cuenta las filas con campos nulos. No se en que estoy fallando. :'( A ver si me podeis echar una mano. Gracias.: |
Re: ¿Se puede en Oracle en un select poner dos count con distinto where? Cita:
Yo lo hago asi, pero no es exactamente un count: (la sintaxis puede cambiar ligeramente, hace tiempo que no uso Oracle y esto es de postgres) select sum(CASE WHEN condicion1 THEN 1 ELSE 0 END) as contador_condicion1, sum(CASE WHEN condicion2 THEN 1 ELSE 0 END) as contador_condicion2 .... |
Respuesta: ¿Se puede en Oracle en un select poner dos count con distinto where? saludos quisiera saber como puedo poner dos count que me den datos de una misma tabla pongo el ejemplo que tal como lo tengo me da los valores pero se repiten ósea ejemplo columna 1 tengo valor total 5 y columna 2 me debería de dar otro valor pero pone el mismo 5 de la columna 1 SELECT id, fecha, mes, edad_ninez, sexo_ninez, tipo_violencia_fisica_ninez, tipo_violencia_psicologica_ninez, COUNT(tipo_violencia_fisica_ninez) AS totalVfisica, COUNT(tipo_violencia_psicologica_ninez) AS totalSicplogica FROM clinica_atencion_integral WHERE (tipo_violencia_fisica_ninez = 'si') AND (tipo_violencia_psicologica_ninez = 'si') GROUP BY mes ORDER BY mes DESC esto es ejemplo de lo que saca mes totalVfisica totalSicplogica enero 2 2 febrero 4 4 marzo 8 8 . . agradezco su ayuda pues he buscado y buscado y no encuentro respuesta más que para hacer esto pero para dos tablas y yo tengo los campos en una sola tabla. gracias |
| La zona horaria es GMT -6. Ahora son las 06:26. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.