Ajuda ConsultaPostgreSQL

18/11/2011

0

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

Responder

Posts

23/11/2011

Jair N.

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;
Responder

23/11/2011

José Júnior

Deu certo. Obrigado
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar