Usuário com melhor resposta
Select com tres tabelas

Pergunta
-
Alguem tem alguma sugestão?
Preciso obter a contagem de casos com resultado Normal e Alterado.
O grupo R_Normal são os com resultado abaixo de 100 e id_jejum>=1 e
O grupo R_Alterado são os com resultado acima ou igual 100 e id_jejum>=1.
As tabelas estão nos tres SELECT abaixo:
SELECT id_jejum, tempo
FROM tb_atende_pf_jejum
SELECT id_historico, cod_pf, data, cod_tem_diabetes, cod_tem_familiares_diabeticos, cod_jejum
FROM tb_atende_pf_historico
SELECT id_glicemia_capilar, data, cod_pf, cod_historico, resultado
FROM tb_atende_pf_glicemia_capilar
- Editado Wilson Boris quarta-feira, 10 de julho de 2013 14:23 erro conteudo
Respostas
-
Obrigado pelo retorno gapimex,
a contagem saiu certinha.
- Marcado como Resposta Wilson Boris quarta-feira, 10 de julho de 2013 15:44
Todas as Respostas
-
Alguem tem alguma sugestão?
Preciso obter a contagem de casos com resultado Normal e Alterado.
O grupo R_Normal são os com resultado abaixo de 100 e id_jejum>=1 e
O grupo R_Alterado são os com resultado acima ou igual 100 e id_jejum>=1.
As tabelas estão nos tres SELECT abaixo:
SELECT id_jejum, tempo
FROM tb_atende_pf_jejum
SELECT id_historico, cod_pf, data, cod_tem_diabetes, cod_tem_familiares_diabeticos, cod_jejum
FROM tb_atende_pf_historico
SELECT id_glicemia_capilar, data, cod_pf, cod_historico, resultado
FROM tb_atende_pf_glicemia_capilar
Eu tentei com o código abaixo, mas retorna com contagem errada:
SELECT 'R_Normal' AS Grupo,
COUNT (*) AS Total
FROM (tb_atende_pf_glicemia_capilar A
INNER JOIN tb_atende_pf_historico C
ON A.cod_historico = C.id_historico)
WHERE (A.resultado <= 100)
AND (C.cod_jejum >= 1)
GROUP BY A.resultado, C.cod_jejum
UNION SELECT 'R_Alterado' AS Expr1,
COUNT (*) AS Expr2
FROM (tb_atende_pf_glicemia_capilar A
INNER JOIN tb_atende_pf_historico C
ON A.cod_historico = C.id_historico)
WHERE (A.resultado > 100)
AND (C.cod_jejum >= 1)
GROUP BY A.resultado, C.cod_jejum; -
Cara não entendi muito bem sua pergunta.
Obs: se vc quiser contar todos os registros basta utilizar a função Count(*) do sql.
SELECT (select count(*) from tbl1 where ID = '100') + (select count(*) from tbl2 where ID = '200') + (select count(*) from tbl3 where ID = '300')
abraço!
-
-
Bom dia,
Wilson, experimente remover a clausula Group By das querys que você postou acima.
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
Imagine que vc tenha uma tabela de produtos com uma flag Ativo que retorna 0 ou 1.
SELECT COUNT(*) FROM dbo.Produto -- total de produtos (ambos) SELECT COUNT(*) FROM dbo.Produto WHERE Ativo = 1 -- total prod ativos SELECT COUNT(*) FROM dbo.Produto WHERE Ativo = 0 -- total prod inativos --total (ambos) SELECT SUM (qtd) FROM ( (SELECT COUNT(*)AS qtd FROM dbo.Produto WHERE Ativo = 1) UNION (SELECT COUNT(*) AS qtd FROM dbo.Produto WHERE Ativo = 0 ) ) AS total
vc pode aplicar a mesma lógica. cuidado com os inner joins eles podem estar alterando os resultados.
Obs: Aconselho fazer as querys por partes para ter certeza do resultado, assim como o exemplo que postei!.
Abraço.
-
Obrigado pelo retorno gapimex,
a contagem saiu certinha.
- Marcado como Resposta Wilson Boris quarta-feira, 10 de julho de 2013 15:44
-