none
Select com tres tabelas RRS feed

  • 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
    quarta-feira, 10 de julho de 2013 14:22

Respostas

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;


    quarta-feira, 10 de julho de 2013 14:36
  • 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!

    quarta-feira, 10 de julho de 2013 14:37
  • Obrigado pelo retorno Romy,

    eu preciso somar os registros com resultados <=100 e >100 onde  id_jejum>=1,

    então criei dois grupos Normal e Alterado.

    quarta-feira, 10 de julho de 2013 14:41
  • Bom dia,

    Wilson, experimente remover a clausula Group By das querys que você postou acima.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 10 de julho de 2013 15:10
  • 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.

    quarta-feira, 10 de julho de 2013 15:19
  • Obrigado pelo retorno gapimex,

    a contagem saiu certinha.

    • Marcado como Resposta Wilson Boris quarta-feira, 10 de julho de 2013 15:44
    quarta-feira, 10 de julho de 2013 15:34
  • Romy retirando o GROUP BY a contagem fica correta, mas vou estudar o teu SELECT.

    Não entendi quanto ao alerta com o INNER JOINS, onde poderia aprofundar o conhecimento?

    quarta-feira, 10 de julho de 2013 15:43