Selecionar registro e transformar em colunas no mysql
Tenho a seguinte tabela: movimento (data, id_pagamento, valor)
01/01/1999 DINHEIRO 9,90
01/01/1999 DINHEIRO 10,50
01/01/1999 CARTAO 5,50
01/01/1999 DINHEIRO 7,50
gostaria de fazer um select que o resultado seja assim:
DATA, DINEHIRO, CARTAO
01/01/1999 27,90 5,50
01/01/1999 DINHEIRO 9,90
01/01/1999 DINHEIRO 10,50
01/01/1999 CARTAO 5,50
01/01/1999 DINHEIRO 7,50
gostaria de fazer um select que o resultado seja assim:
DATA, DINEHIRO, CARTAO
01/01/1999 27,90 5,50
Wayder Loyola
Curtidas 0
Melhor post
Ricardo Pestana
26/09/2018
Bom dia Wayder,
Tenta assim....
SELECT data,
SUM(IF (id_pagamento = 'DINHEIRO', VALOR, 0)) AS DINHEIRO,
SUM(IF (id_pagamento = 'CARTAO', VALOR, 0)) AS CARTAO
FROM movimento ;
abraço
Tenta assim....
SELECT data,
SUM(IF (id_pagamento = 'DINHEIRO', VALOR, 0)) AS DINHEIRO,
SUM(IF (id_pagamento = 'CARTAO', VALOR, 0)) AS CARTAO
FROM movimento ;
abraço
GOSTEI 1
Mais Respostas
Wayder Loyola
26/09/2018
Ricardo, bom dia!
Obrigado pela dica. Faltou um detalhe, tem uma outra tabela com as formas de pagamento.
Tabela: formapagto
ID DESCRICAO
1 Dinheiro
2 Cartão Crédito
3 Cartão Débito
Tabela movimento:
DATA ID_FORMAPAGTO VALOR
01/01/1999 1 9,90
01/01/1999 1 10,50
01/01/1999 2 5,50
01/01/1999 1 7,50
Resultado:
DATA, DINHEIRO, CARTAO_CREDITO
01/01/1999 27,90 5,50
Obrigado pela dica. Faltou um detalhe, tem uma outra tabela com as formas de pagamento.
Tabela: formapagto
ID DESCRICAO
1 Dinheiro
2 Cartão Crédito
3 Cartão Débito
Tabela movimento:
DATA ID_FORMAPAGTO VALOR
01/01/1999 1 9,90
01/01/1999 1 10,50
01/01/1999 2 5,50
01/01/1999 1 7,50
Resultado:
DATA, DINHEIRO, CARTAO_CREDITO
01/01/1999 27,90 5,50
GOSTEI 0
Ricardo Pestana
26/09/2018
Wayder,
No "IF" vc vai ter que saber as formas de pagamento, mas como pelo que entendi vc não vai ter essa descrição na tabela de movimentos... então é só fazer um join conforme abaixo...
É isso que vc precisa ?
SELECT data,
SUM(IF (f.descricao = ''DINHEIRO'', VALOR, 0)) AS DINHEIRO,
SUM(IF (f.descricao = ''CARTAO'', VALOR, 0)) AS CARTAO
FROM testes.minhatabela t
inner join formapag f on f.id = t.idfpg;
No "IF" vc vai ter que saber as formas de pagamento, mas como pelo que entendi vc não vai ter essa descrição na tabela de movimentos... então é só fazer um join conforme abaixo...
É isso que vc precisa ?
SELECT data,
SUM(IF (f.descricao = ''DINHEIRO'', VALOR, 0)) AS DINHEIRO,
SUM(IF (f.descricao = ''CARTAO'', VALOR, 0)) AS CARTAO
FROM testes.minhatabela t
inner join formapag f on f.id = t.idfpg;
GOSTEI 1