Ver Mensaje Individual
  #7 (permalink)  
Antiguo 15/04/2015, 16:16
Avatar de JuJoGuAl
JuJoGuAl
 
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Ciclo de select?

Bueno agrego:

3 tablas:

##########
Clientes
------------------
id nombre tipo
1 juan seguros
2 pedro fundacion
3 jose empresas
--------------------
Todo cliente que no aparezca en esta tabla se considera "particular"
##########
Servicios
------------------
id nombre unidad
1 rx torax radiologia
2 hematologia completa laboratorio
3 resonancia cerebral resonancia
--------------------
Luego la tabla donde se almacenan todos los Servicios ejecutados:
##########
sol_servicios
------------------
id cliente paciente articulo cantidad precio
1 juan pac1 rx toax 2 175
2 pedro pac2 resonancia cereb 1 350
3 manuel pac3 hematologia completa 1 200
--------------------

Bien como pretendo saber lo que facturo cada Unidad por cliente tecnicamente es un Select:

Código MySQL:
Ver original
  1. SELECT SUM(sol.cantidad*sol.precio) as monto, SUM(sol.cantidad) as cuenta, COUNT(DISTINCT sol.paciente) as pacientes FROM solc_servicios sol INNER JOIN sadmint_clientes c ON sol.cliente=c.cod_resp INNER JOIN sadmint_servicios s ON sol.articulo=s.cod_serv WHERE YEAR(sol.fecha)=2015 AND MONTH(sol.fecha)=03 AND s.dep='laboratorio' AND C.TIPO='seguros'"

que me debe de traer como resultado de los clientes SEGUROS de la unidad LABORATORIO
monto (Monto de los examanes), cuenta (Cantidad de clientes SEGUROS), pacientes (PACIENTES ATENDIDOS)

Separo clientes de pacientes porque normalmente un cliente no necesariamente es el paciente.

Bueno debido a que son muchas unidades y algunos tipos de cliente pense que seria mas "rapido" o "eficaz" sacar en un solo select todos los datos de una unidad:

Código MySQL:
Ver original
  1. SUM(CASE WHEN C.tipo='SEGUROS' THEN sol.MONTO END) as m_se,
  2. SUM(CASE WHEN C.tipo='EMPRESAS' THEN sol.MONTO END) as m_em,
  3. ...
  4. COUNT(CASE WHEN C.tipo='SEGUROS' THEN c.cod_resp END) as e_se
  5. ...
  6. FROM solc_servicios sol
  7. INNER JOIN sadmint_servicios s ON sol.articulo = s.cod_serv
  8. LEFT JOIN sadmint_clientes c ON sol.cliente = c.cod_resp
  9. WHERE YEAR (sol.fecha) = 2015
  10.  AND MONTH (sol.fecha) = 3
  11. AND s.dep = 'BANCO DE SANGRE'

que me traiga
monto_seguros, monto_empresas, monto_fundacion...
cuenta_seguros, cuenta_empresas....
pacientes_seguros, pacientes_empresas...

pero se tarda bastante.

Entonces Busco que me den consejos como puedo Potenciar esta búsqueda?