Contar itens de uma tabela e dispensar os detalhes

Firebird

14/04/2006

amigos tenho uma bronca e nao estou conseguindo resolver e o seguinte tenho uma tabela mestre e outra detalhe porem faço uma pesquisa mas quero um count apenas da tabela mestre

ex: select count(quant) from mestre
inner join detalhe on (....)......


porem na minha tabela mestre tenho 5 registros e na detalhe tenho 50 então o meu count vai me retiornar 50 e quero epnas os 5...

help....


Sremulador

Sremulador

Curtidas 0

Respostas

Thomaz_prg

Thomaz_prg

14/04/2006

vc quer o COUNT ou o SUM ???

Pq se for o COUNT, isto é, ver quantos registros tem na tabela pai seria apenas:

SELECT COUNT(*) FROM TABELAPAI WHERE <SUA CLAUSULA>


GOSTEI 0
Sremulador

Sremulador

14/04/2006

o grande problema e que tenho que exibir a soma dos itens ...


GOSTEI 0
Thomaz_prg

Thomaz_prg

14/04/2006

Veja se é isso que você quer:

select M.NUM_PEDIDO, SUM(I.QTD) from PEDIDOS M, ITENS I
WHERE I.NUM_PEDIDO = M.NUM_PEDIDO
GROUP BY 1



GOSTEI 0
Sremulador

Sremulador

14/04/2006

quase isso, porem vai dar o mesmo total, pois na pesquisa vai ser listato a junção dos dois, neste seu caso se eu tenho 10 itens e 5 pedidos ele vai me retornar 10 para os dois mas eu quero e 5 e 10...


GOSTEI 0
Thomaz_prg

Thomaz_prg

14/04/2006

Agora acho que entendi o que vc quer....
tente assim:

SELECT 
 P.NUM_PEDIDO, 
 (select SUM(I.QTD) from ITENS I where I.NUM_PEDIDO=P.NUM_PEDIDO)
FROM
 PEDIDOS P



GOSTEI 0
Sremulador

Sremulador

14/04/2006

estamos quase lá, so que tem tem um pequeno detalhe, estou utilizando com um agrupamento então desta maneira o total de pedidos (no caso) sóvai sair em uma das colunas ex:

SELECT 
 P.NUM_PEDIDO, 
 (select SUM(I.QTD) from ITENS I where I.NUM_PEDIDO=P.NUM_PEDIDO) 
FROM 
 PEDIDOS P 
 group by PEDIDOS 



Resultado

Item Quan
1 0
2 10
3 0.....


sendo que para os itens 1 e 3 tenho quantidades...
entendeu, será que tem solução...


GOSTEI 0
Thomaz_prg

Thomaz_prg

14/04/2006

Amigo, apenas uma pergunta simples..... porque o uso do group by???
Se você não tiver outra função agregada não precisa usá-lo. Uma simples ordenação creio que seria o suficiente. Experimente sem o GroupBy e veja o resultado.


GOSTEI 0
Sremulador

Sremulador

14/04/2006

bem porque em alguns casos os mestres não tem detalhes e quero que mostre mesmo os que não tiverem para o casa da minha tabela aqui e tem que me mostrar os mestres tendo ou não detalhes...


GOSTEI 0
Thomaz_prg

Thomaz_prg

14/04/2006

Bom, o select que eu tinha colocado irá mostrar todos os ´mestres´, mesmo os que não tem ´detalhes´. O caso é que estaria aparecendo NULL. Se for para aparecer o 0 (zero) ao invés do NULL, basta usar coalesce, dessa forma:

SELECT 
 P.NUM_PEDIDO, 
 COALOESCE( (select SUM(I.QTD) from ITENS I where I.NUM_PEDIDO=P.NUM_PEDIDO) , 0 ) AS QTD
FROM 
 PEDIDOS P 
 group by PEDIDOS


Se não for isso ainda, faça o seguinte, mostre a estrutura destas 2 tabelas.


GOSTEI 0
Sremulador

Sremulador

14/04/2006

SELECT CCDS, SUM(I.INDA - I.INDI) * 100, (SELECT COUNT(L.LTEN) FROM LEITOS L WHERE L.LTEN=I.INEN) FROM INTERNACAO I INNER JOIN LEITOS ON (LTLT=I.INLT AND LTEN=I.INEN) INNER JOIN CENTRODECUSTO ON (CCCD=LTCC) WHERE INDI BETWEEN ´05/01/06´ AND ´05/31/06´ AND INDA IS NOT NULL GROUP BY CCDS


esta dando erro, dizendo que falta agrupar alguma coisa, mas agora oque ?


GOSTEI 0
Cabelo

Cabelo

14/04/2006

colega tente assim:

SELECT CCDS, SUM(I.INDA - I.INDI) * 100, (SELECT COUNT(L.LTEN) as D_SUM FROM LEITOS L WHERE L.LTEN=I.INEN) FROM INTERNACAO I
INNER JOIN LEITOS ON (LTLT=I.INLT AND LTEN=I.INEN)
INNER JOIN CENTRODECUSTO ON (CCCD=LTCC)
WHERE INDI BETWEEN ´05/01/06´ AND ´05/31/06´ AND INDA IS NOT NULL
GROUP BY CCDS, D_SUM

acredito que deva resolver seu problema..


GOSTEI 0
Sremulador

Sremulador

14/04/2006

assim não funcionou tb...


GOSTEI 0
Cabelo

Cabelo

14/04/2006

Colega...

Você deve refernciar os campos com as tabelas na frente...

Altere seu sql e execute o select... acredito que o problemas esteja resolvido...


GOSTEI 0
Sremulador

Sremulador

14/04/2006

amigo o problema consiste quando eu coloco o where no sub-select quando eu retiro funciona beleza...


GOSTEI 0
POSTAR