Ajuda ConsultaPostgreSQL

PostgreSQL

18/11/2011

Eu tenho que fazer uma consulta onde os médicos recebem por cada consulta onde os clientes tem um plano de saude Medis 50 reais e os pacientes que tem plano de saude ADMG recebem 25. Lembrando que eu não tenho uma tabela com uma coluna salários, deve ser uma consulta mesmo. Eu fiz as seguintes views, só que não consigo juntar uma na outra, pois eu posso ter um médico que só realizou consulta com um dos tipos de seguros, ou seja, quando tentar somar um de um tipo de seguro e um null vai dar null na soma total.

DROP VIEW auxiliar1;

CREATE VIEW auxiliar1 AS (SELECT consulta.numeroOrdem, medico.Nome, COUNT(consulta.numeroOrdem)*50 AS valorMedis
FROM consulta, medico, paciente
WHERE medico.numeroOrdem = consulta.numeroOrdem
AND paciente.BI = consulta.BI
AND consulta.`data` BETWEEN 2011-11-01 AND 2011-11-08
AND paciente.TipoSeguro = Medis
GROUP BY consulta.numeroOrdem, medico.Nome);

DROP VIEW auxiliar2;

CREATE VIEW auxiliar2 AS (SELECT consulta.numeroOrdem, medico.Nome, COUNT(consulta.numeroOrdem)*25 AS valorADMG
FROM consulta, medico, paciente
WHERE medico.numeroOrdem = consulta.numeroOrdem
AND paciente.BI = consulta.BI
AND consulta.`data` BETWEEN 2011-11-01 AND 2011-11-08
AND paciente.TipoSeguro = ADMG
GROUP BY consulta.numeroOrdem, medico.Nome);
José Júnior

José Júnior

Curtidas 0

Respostas

Jair N.

Jair N.

18/11/2011

Eu tenho que fazer uma consulta onde os médicos recebem por cada consulta onde os clientes tem um plano de saude Medis 50 reais e os pacientes que tem plano de saude ADMG recebem 25. Lembrando que eu não tenho uma tabela com uma coluna salários, deve ser uma consulta mesmo. Eu fiz as seguintes views, só que não consigo juntar uma na outra, pois eu posso ter um médico que só realizou consulta com um dos tipos de seguros, ou seja, quando tentar somar um de um tipo de seguro e um null vai dar null na soma total.

DROP VIEW auxiliar1;

CREATE VIEW auxiliar1 AS (SELECT consulta.numeroOrdem, medico.Nome, COUNT(consulta.numeroOrdem)*50 AS valorMedis
FROM consulta, medico, paciente
WHERE medico.numeroOrdem = consulta.numeroOrdem
AND paciente.BI = consulta.BI
AND consulta.`data` BETWEEN 2011-11-01 AND 2011-11-08
AND paciente.TipoSeguro = Medis
GROUP BY consulta.numeroOrdem, medico.Nome);

DROP VIEW auxiliar2;

CREATE VIEW auxiliar2 AS (SELECT consulta.numeroOrdem, medico.Nome, COUNT(consulta.numeroOrdem)*25 AS valorADMG
FROM consulta, medico, paciente
WHERE medico.numeroOrdem = consulta.numeroOrdem
AND paciente.BI = consulta.BI
AND consulta.`data` BETWEEN 2011-11-01 AND 2011-11-08
AND paciente.TipoSeguro = ADMG
GROUP BY consulta.numeroOrdem, medico.Nome);


Bom dia, se, seu banco de dados for postgresql, é melhor proceder desta forma:

DROP VIEW auxiliar;
CREATE VIEW auxiliar AS
SELECT consulta.numeroOrdem
, medico.Nome
, CAST (CASE WHEN (paciente.TipoSeguro = Medis) THEN (COUNT(consulta.numeroOrdem)*50)
WHEN (paciente.TipoSeguro = ADMG ) THEN (COUNT(consulta.numeroOrdem)*25)
ELSE 0 END AS INTEGER) AS valor
FROM consulta
INNER JOIN medico
ON (medico.numeroOrdem = consulta.numeroOrdem)
LEFT JOIN paciente
ON (paciente.BI = consulta.BI)
WHERE (consulta.data BETWEEN 2011-11-01 AND 2011-11-08)
GROUP BY consulta.numeroOrdem
, medico.Nome;
GOSTEI 0
José Júnior

José Júnior

18/11/2011

Deu certo. Obrigado
GOSTEI 0
POSTAR