Ir para conteúdo

Arquivado

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

Marcovisk

Postgresql com Case e Sum

Recommended Posts

Olá pessoal! Preciso de uma ajuda com uma consulta SQL no PostGreSQL (9.5). Entendo só o básico de SQL, e estou apanhando pra fazer uma consulta. Tenho uma tabela com a seguinte estrutura (simplificada) e registros.

Data, Situação, Total
22/09 Aguardando 2
22/09 Dirigindo 4
22/09 Refeição 1
22/09 Dirigindo 3
22/09 Refeição 1
22/09 Aguardando 3
23/09 Aguardando 1

Preciso fazer uma SQL que me retorne os dados agrupados por situação, e somando a coluna total. Deveria ficar assim:

Data Aguardando Dirigindo Refeição

22/09 5 7 2

23/09 1 0 0

Porém, já usei o case com sum e group by e o máximo que consegui foi o seguinte:

Data Aguardando Dirigindo Refeição

22/09 5 0 0 // Gostaria que esses três registros ficassem em uma linha só.

22/09 0 7 0 //

22/09 0 0 2 //

23/09 1 0 0
A SQL que eu fiz é a seguinte:
select data,
(case when situacao='DIRIGINDO' then sum(total) end) as "Dirigindo",
(case when situacao='REFEIÇÃO' then sum(total) end) as "Refeição",
(case when situacao='AGUARDANDO' then sum(total) end) as "Aguardando"
from jornada where codmotorista=3 group by data, situacao
Alguém me mostra onde estou errando, por favor!?
Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente

select data,
sum(case when situacao='DIRIGINDO' then (total) else 0 end) as "Dirigindo", 
sum(case when situacao='REFEIÇÃO' then (total) else 0 end) as "Refeição",
sum(case when situacao='AGUARDANDO' then (total) else 0 end) as "Aguardando" 
from jornada 
where codmotorista=3 
group by data

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ckcesar
      Eu tenho uma aplicação no zend com a versão 5.6 e com o postgresql 9.6. Agora eu precisei mudar a versão do meu postgresql para o 16.1, a parte de conexão do bd e consultas sqls funciona perfeitamente, o meu problema está para acessar os meus controllers. Eles não são encontrados em nenhuma rota, quero ver se alguém já passou por esse problema para me ajudar. Obrigado.
    • Por nascimnbeni80@gmail.com
      Caros amigos preciso somar campos de varias tabelas (15 no total), nos quais eu quero somar somente os campos iguais nas data específicas abaixo segue um exemplo.
      OBS: precisa ser sempre o ultimo registro de cada tabela, então considere usar LIMIT 1 e ORDER BY id DESC
       

    • Por manolegal
      Olá amigos(as) do Fórum.
      Tenho um número inteiro no PHP e preciso inseri-lo no Postgresql com 02 casas decimais.
      Defini o campo no Postgresql do tipo numeric(14,2)
      O valor está assim no PHP:
      2961966 Preciso gravar no BD da seguinte maneira:
      29619.66 Porém está gravando da seguinte forma:
      2961966.00 Tentei utilizando number_format, porém não consegui:
      $numero_bd = number_format($numero, '.', ''); $numero_bd = number_format($numero,2,"."); $numero_bd = number_format($numero,2,","numerovalor_ref_15,2,",","."); Caso alguém possa me ajudar, desde já agradeço.
    • Por jackvinte
      Olá, sou nova por aqui.
       
      É possível fazer um select join dentro de um case, segue o que preciso:
       
      select m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto --,case when m.ArquivoOrdemMov='OC'then 'Preço' /*dentro do then preciso pegar o preço ->select ci.CustoOCItem from OCItem ci join OC c on c.SeqOC=ci.SeqOC*/ --else 'Sem valor'end from Mov m join MovFisica f on m.SeqMovFisica=f.SeqMovFisica join OC c on m.ContadorAgenteMov=c.ContadorAgenteOC join Produto p on m.SeqProduto=p.SeqProduto where m.ArquivoOrdemMov='OC' and c.SituacaoOC='FECHADA'  
    • Por SAS Junior
      Olá, sou novo aqui e em SQL Server, estou com um problema para buscar um resultado. 
      Caso hoje seja segunda, trazer as instalações dos últimos 3 dias (sexta, sábado e domingo), caso não seja, trazer só os de ontem, tentei da forma abaixo e muitas outras e não consegui, desde já agradeço.    
      SELECT codigoCliente AS [CÓD], CpfCnpj AS [CPF/CNPJ] ,NomeFantasia as [NOME FANTASIA] ,UPPER(NomeContato) as [NOME DE CONTATO] ,CASE WHEN CLI.DDDCelular IS NULL THEN 'NÃO TEM' ELSE DDDCelular END AS [DDD CEL] ,CASE WHEN Celular IS NULL THEN 'NÃO TEM' ELSE Celular END AS CELULAR ,CASE WHEN DDDTelefone IS NULL THEN 'NÃO TEM' ELSE DDDTelefone END AS [DDD TEL] ,CASE WHEN Telefone IS NULL THEN 'NÃO TEM' ELSE Telefone END AS TELEFONE ,DataInstalacao AS [INSTALAÇÃO] ,DATEPART(weekday,DataInstalacao) as [DIASEMANA] ,UPPER(Departamento) AS [DEPTO CAD] ,upper(UsuarioCadastro) as [CADASTRADO POR] ,CASE WHEN UPPER(EMAIL) IS NULL THEN 'NÃO TEM EMAIL' ELSE UPPER(EMAIL) END AS EMAIL FROM CLIENTE WHERE (CASE WHEN (DATEPART(weekday,GETDATE()) = '2' THEN DATEPART(DAY, DataInstalacao) >= DATEPART(DAY, GETDATE()-3) ELSE DATEPART(DAY, DataInstalacao) = DATEPART(DAY, GETDATE()-1) END) AND MONTH(DataInstalacao) = MONTH(GETDATE()) AND YEAR(DataInstalacao) = YEAR(GETDATE()) AND Situacao = 'MAQUINA INSTALADA'  
×

Informação importante

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