Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Somas e critérios


Jair Perrut

Pergunta

Boa tarde!

Estou tentando fazer uma consulta em que tenho as colunas "DATA", "VALOR" e "CONDIÇÂO", quero obter os totais por tipo de condição e agrupados por data

Ex:

**TABELA**

DATA | VALOR | CONDIÇÃO

01/04 | R$100 | CARTÃO

01/04 | R$30 | DINHEIRO

01/04 | R$200 | CHEQUE

01/04 | R$500 | CHEQUE

02/04 | R$250 | CARTÃO

02/04 | R$25 | DINHEIRO

02/04 | R$150 | CARTÃO

02/04 | R$80 | DINHEIRO

03/04 | R$100 | CARTÃO

03/04 | R$100 | CARTÃO

03/04 | R$100 | CARTÃO

03/04 | R$100 | CARTÃO

**RESULTADO DA CONSULTA**

DATA | CARTÃO | CHEQUE | DINHEIRO | TOTAL

01/04 | R$100 | R$700 | R$30 | R$830

02/04 | R$400 | R$0 | R$105 | R$505

03/04 | R$400 | R$0 | R$0 | R$400

Até agora só consegui obter esse resultado fazendo uma consulta em cima de outras consultas separadas para cada condição

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Jair,

Tem como fazer uma inversão entre Linha X Coluna, mas não gosto de mexer pois o resultado as vezes não fica como esperado....

A melhor forma que vejo seriam vários subselects para retornar os valores. Fiz um exemplo e espero que ajude:

-- Criação da temporária
CREATE TABLE #Valor (DATA DATETIME, Valor INT, Condicao VARCHAR(20))

-- Inserção dos Dados
INSERT INTO #Valor VALUES ('2012-04-01' , 100 , 'CARTAO')
INSERT INTO #Valor VALUES ('2012-04-01' , 30 , 'DINHEIRO')
INSERT INTO #Valor VALUES ('2012-04-01' , 200 , 'CHEQUE')
INSERT INTO #Valor VALUES ('2012-04-01' , 500 , 'CHEQUE')
INSERT INTO #Valor VALUES ('2012-04-02' , 250 , 'CARTAO')
INSERT INTO #Valor VALUES ('2012-04-02' , 25 , 'DINHEIRO')
INSERT INTO #Valor VALUES ('2012-04-02' , 150 , 'CARTAO')
INSERT INTO #Valor VALUES ('2012-04-02' , 80 , 'DINHEIRO')
INSERT INTO #Valor VALUES ('2012-04-03' , 100 , 'CARTAO')
INSERT INTO #Valor VALUES ('2012-04-03' , 100 , 'CARTAO')
INSERT INTO #Valor VALUES ('2012-04-03' , 100 , 'CARTAO')
INSERT INTO #Valor VALUES ('2012-04-03' , 100 , 'CARTAO')

-- Resultado
SELECT v.DATA, 
(SELECT SUM(c.valor) FROM #Valor c WHERE c.DATA=v.DATA AND c.condicao='Cartao') TotalCartao,
(SELECT SUM(c.valor) FROM #Valor c WHERE c.DATA=v.DATA AND c.condicao='CHEQUE') TotalCheque,
(SELECT SUM(c.valor) FROM #Valor c WHERE c.DATA=v.DATA AND c.condicao='DINHEIRO') TotalDiqueiro,
(SELECT SUM(c.valor) FROM #Valor c WHERE c.DATA=v.DATA AND c.condicao='DINHEIRO') TotalDiqueiro,
(SELECT SUM(c.valor) FROM #Valor c WHERE c.DATA=v.DATA) Total 
FROM #Valor v GROUP BY v.DATA

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Jair beleza?

Eu sei que já está resolvido, mas eu gostaria de propor uma outra resolução.

Essa é usando o PIVOT, é um pouco mais complexa, mas seria o mais correto a fazer.

Segue o codigo:

SELECT DATA, 
       ISNULL(CARTAO,0) CARTÃO,   -- Caso for nulo será substituido por zero
       ISNULL(CHEQUE,0) CHEQUE,
       ISNULL(DINHEIRO,0)DINHEIRO ,
       ISNULL(CARTAO,0)+ ISNULL(CHEQUE,0)+ ISNULL(DINHEIRO,0) TOTAL    --Total / soma dos outros valores
FROM   #vendas PIVOT (Sum(VALOR) FOR CONDICAO IN (CARTAO, CHEQUE, DINHEIRO,TOTAL))TABELA_PIVOT

Abraços

Johnny

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Jonny,

Cheguei a cogitar esta implementação no post acima: "Tem como fazer uma inversão entre Linha X Coluna". Concordo com você que é a correta, mas em questão de entendimento e manutenção preferiria com subselects, uma vez que é muito dificil utilizações de pivot em implementações.

Fica ai uma boa sugestão!!

Link para o comentário
Compartilhar em outros sites

  • 0

E aí manolos

da forma que o johnny falou deu certo também, porém fui aplicar essa técnica em outra consulta e estou tendo dificuldades!

Quero uma consulta que me retorne a soma dos valores por loja...

Ex:

No banco de dados eu tenho...

BD.JPG

E minha consulta esta saindo assim...

RESULT.JPG

o que estou fazendo de errado?

Editado por Jair Perrut
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...