Ir para conteúdo

Arquivado

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

vagner.oliveira

com GROUP BY

Recommended Posts

Tenho uma tabela com os seguintes campos:

 

| nome_prod |  cod_prod  |	status	|
+-----------+------------+--------------+
|  mouse	|	 2	  |   estoque	|
+-----------+------------+--------------+
|  mouse	|	 2	  |   estoque	|
+-----------+------------+--------------+
|  mouse	|	 2	  |   estoque	|
+-----------+------------+--------------+
|  teclado  |	 4	  |   vendido	|
+-----------+------------+--------------+
|  teclado  |	 4	  |   vendido	|
+-----------+------------+--------------+
|	 HD	|	 7	  |   cotacao	|
+-----------+------------+--------------+

Quero que some todos que estao em estoque, os demais apenas liste com quantidade igual a zero:

 

| nome_prod |  cod_prod  |  quantidade  |
+-----------+------------+--------------+
|  mouse	|	 2	  |	  3	   |
+-----------+------------+--------------+
|  teclado  |	 4	  |	  0	   |
+-----------+------------+--------------+
|	 HD	|	 7	  |	  0	   |
+-----------+------------+--------------+

Usei a seguinte instução SQL, mas ela só me retorna os produtos que estão em estoque:

SELECT nome_prod, COUNT(cod_prod) Quantidade 
FROM estoque
WHERE status='estoque'
GROUP BY (cod_prod)

Sou novato em SQL, quem puder me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT nome_prod, sum((case when status='estoque' then 1 else 0 end)) Quantidade 

FROM estoque

GROUP BY nome_prod

Compartilhar este post


Link para o post
Compartilhar em outros sites

sum((case when status='estoque' then 1 else 0 end))

 

se for 'estoque retorna 1 senão zero

 

depois se soma isto , daí o resultado pedido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só colocar as colunas a mais que se quer agrupar.

 

SELECT nome_prod, marca , valor , sum((case when status='estoque' then 1 else 0 end)) Quantidade 
FROM estoque
GROUP BY nome_prod, marca , valor

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT nome_prod, marca, valor, sum((case when status='estoque' then 1 else 0 end)) Quantidade

FROM estoque

GROUP BY nome_prod, marca, valor

isso se você não for somar o valor, se for somar o valor, pões sum(valor) no lugar de valor e tira ele do group by

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.