Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Einstein

Somar ou contar campos

Recommended Posts

Ola pessoal,

 

Estou com um grande problema.

 

Tenho um sistema que tem duas tabelas : membro e laudo

 

tb_membro : codigo_membro e membro

tb_laudo: codigo, nome, membro1,membro2, membro3,data

 

A duvida é: Preciso fazer uma consulta para saber quantos registros de cada membro foram feitos em um periodo, sabendo que tenho 3 campos membros (membro1, membro2, membro3) num registro.

 

Segue exemplo:

Tb_laudo

 

codigo nome membro1 membro2 membro3 data

1 teste 1 5 2 17/09/2010

2 teste1 3 1 3 17/09/2010

3 teste2 1 3 2 17/09/2010

 

 

na consulta seria :

membro qtd de membros (no periodo17/09/2010)

pe 3

mao 2

dedo 3

femur 1

Obs: contado a quantidade de membros nos tres registros (1,2,3) em seus respectivos campos (membro1,membro2 e membro3)

 

Nao consigo pensar em query alguma.

 

Tentei essa query

 

SELECT tb_membro.membro AS Membro, [membro3]+[membro2]+[membro1] AS total

FROM tb_membro INNER JOIN tb_laudo ON (tb_membro.codigo_membro = tb_laudo.membro4) AND (tb_membro.codigo_membro = tb_laudo.membro3) AND (tb_membro.codigo_membro = tb_laudo.membro2) AND (tb_membro.codigo_membro = tb_laudo.membro1) AND (tb_membro.codigo_membro = tb_laudo.membro)

WHERE (((tb_laudo.data) Between [Data Inicial] And [Data Final]))

ORDER BY tb_membro.membro;

 

mas nada... essa acaba somando o numero referente ao membro.

 

Valeu pessoal.

Pasteur

Compartilhar este post


Link para o post
Compartilhar em outros sites

O modelo é ruim na minha opinião, deveria haver outra tabela , algo como tb_laudo_itens que teria só um registro para o membro e poderia ocorrer 3 vezes para cada laudo.

 

Mas dentro deste modelo uma solução possível seriam 3 sql juntados por union all

 

 

select 
from tb_membro , tb_laudo
where tb_membro.codigo_membro = tb_laudo.membro1
union all
select 
from tb_membro , tb_laudo
where tb_membro.codigo_membro = tb_laudo.membro2
union all
select 
from tb_membro , tb_laudo
where tb_membro.codigo_membro = tb_laudo.membro3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o que voce disse Motta, porem tirei o all , ou seja fiz a uniao apenas com o union, deu o seguinte o resultado:

 

 

MEMBRO TOTAL

abdomen 2

abdomen 2

abdomen 4

braco 1

braco 1

braco 3

braco 5

braco 8

perna 9

perna 7

perna 1

perna 2

 

Gostaria de saber, como faço para pegar esse resultado acima, e fazer a soma para que fique assim:

 

abdomen 8

braco 18

perna 19

 

Grato

Edson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use o select gerado como uma tabela virtual.

 

select membro,sum(total) total
from
(
select 
from tb_membro , tb_laudo
where tb_membro.codigo_membro = tb_laudo.membro1
union all
select 
from tb_membro , tb_laudo
where tb_membro.codigo_membro = tb_laudo.membro2
union all
select 
from tb_membro , tb_laudo
where tb_membro.codigo_membro = tb_laudo.membro3
) 
group by membro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Está dando erro, abaixo segue o erro:

 

Referencia circular causada pelo alias 'total' da lista select da definicao da consulta.

 

O que pode ser?

 

 

Grato

Pasteur

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei, troque o alias total por outra coisa, talvez um conflito de nome.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.