Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Somas e critérios


Jair Perrut

Question

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 to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

  • 0

Vou tentar fazer desse teu jeito Johnny, o que o Fulvio me passou já resolveu meu problema, mas como eu to aprendendo a mecher com essas querys quanto mais conhecimento melhor

Depois eu informo se eu consegui

Obrigado

Abraços!!!

Link to comment
Share on other 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?

Edited by Jair Perrut
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...