SQL - seleccionar por centro, solicitudes, y por tipo de solicitudes

   
Vista:

seleccionar por centro, solicitudes, y por tipo de solicitudes

Publicado por Jesus (3 intervenciones) el 26/10/2017 17:19:49
Buenas tardes

Quiero realizar una sql para una tabla de solicitudes y que me salga el siguiente resultado en pantalla:

Centro Solicitadas Pendientes de tramitar Tramitadas Anuladas
A CORUÑA 2 0 1 1
AVILES 2 0 2 0
ALMERIA 1 0 1 0
CADIZ 1 1 0 0
CARTAGENA 2 0 2 0

Donde el centro es la columna quiero agrupar, Solicitadas el numero total de solicitudes por centro, Pendientes de tramitar el numero total Pendientes(Estado='I') por centro,Tramitadas el numero total Tramitadas (Estado='T') por centro, Anuladas el numero total de anuladas(Estado='A') por centro

Estoy diseñando primero el Modelo Logico en un diagrama UML y un compañero lo hara en Java más adelante.
Tenia propuesto recuperar primero los Centros mediante una SQL:

select distinct co_idcentro
from sanicitaonline
where co_fchsolicitud between last_day(ADD_MONTHS(sysdate,-2))
and last_day(trunc(sysdate,'Month')-1)
order by co_idcentro

(Nota:el where es que quiero agruparlos en un intervalo de todo el mes anterior, si hay otra manera mejor leere vuestras opiniones)

después de recuperar los centros tenia mediante un bucle (For o While) realizar un select count(*) filtrando con cada centro recuperado en la SQL de antes y por cada tipo de Estado.

Si hay otra manera de hacerlo mejor, la escuchare,

Muchas gracias

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

seleccionar por centro, solicitudes, y por tipo de solicitudes

Publicado por Isaias (1136 intervenciones) el 26/10/2017 17:52:29
¿En que motor de base de datos?, ¿Como quieres la salida de tus datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

seleccionar por centro, solicitudes, y por tipo de solicitudes

Publicado por Jesus (3 intervenciones) el 26/10/2017 18:12:36
la BBDD es Oracle 11.

La salida de datos seria una lista de registros(en el enunciado salio descolocado, lo siento) con las cabeceras en cada columna Centro, Solicitadas, Pendientes de Tramitar, Tramitadas y Anulada.

Espero que sirva,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

seleccionar por centro, solicitudes, y por tipo de solicitudes

Publicado por Rafael (101 intervenciones) el 27/10/2017 12:20:39
Hola

Es muy dificil ayudarte si no conocemos las tablas...
Pero creo solo vas a consultar una tabla... si es asi podrias optar por algo como esto:
1
2
3
4
5
6
7
8
SELECT co_idcentro as Centro
     , COUNT(*) as Solicitadas
     , SUM( CASE WHEN Estado='I') THEN 1 ELSE 0 END ) as Pendientes
     , SUM( CASE WHEN Estado='T') THEN 1 ELSE 0 END ) as Tramitadas
     , SUM( CASE WHEN Estado='A') THEN 1 ELSE 0 END ) as Anuladas
from   sanicitaonline
where  co_fchsolicitud between last_day(ADD_MONTHS(sysdate,-2)) and last_day(trunc(sysdate,'Month')-1)
GROUP  by co_idcentro

Es decir en lugar de hacer ciclos obtenerlo todo en una sola consulta...

Que hago SOLICITADAS cuenta todos los registros agrupados por centro.
Pendientes va sumando si el registro tiene en Estado una 'I' pues le suma UNO (1) si no pues no suma (CERO-0) y se hace lo mismo para el resto de los campos.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

seleccionar por centro, solicitudes, y por tipo de solicitudes

Publicado por Jesus (3 intervenciones) el 27/10/2017 13:35:11
Ha funcionado, la SQL es la siguiente:
1
2
3
4
5
6
7
8
9
10
select co_idcentro as Centro
     , count(*) as Solicitadas
     , sum( case when co_estado ='I' then 1 else 0 end ) as Pendientes
     , sum( case when co_estado ='T' then 1 else 0 end ) as Tramitadas
     , sum( case when co_estado ='A' then 1 else 0 end ) as Anuladas
from   sanicitaonline
where  co_fchsolicitud between to_date('01/'||to_char(trunc(sysdate,'Month')-1,'mm/yyyy'),'dd/mm/yyyy')
and last_day(trunc(sysdate,'Month')-1)
group  by co_idcentro
order by co_idcentro;

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad