Mysql consulta lado a lado

25/04/2017

0

Estou precisando de uma consulta em MYSQL que me retorne os valores lado a lado.
Ex:
Tenho estes dados:
0001 FULANO DE TAL 01/01/2016 120,00
0001 FULANO DE TAL 01/02/2016 120,00
0002 BELTRANO DE TAL 01/01/2016 140,00
0003 CICRANO DE TAL 01/01/2016 110,00
0003 CICRANO DE TAL 01/02/2016 110,00

Preciso de uma consulta que me retorne isto:
0001 FULANO DE TAL 120,00 120,00
0002 BELTRANO DE TAL 140,00
0003 CICRANO DE TAL 110,00 110,00
Jocimar Pequeno

Jocimar Pequeno

Responder

Posts

25/04/2017

Luiz Santos

Boa noite Jocimar.

Não entendi muito bem.
O que você quer dizer com "Lado a Lado"

Grande abraço
Responder

25/04/2017

Jocimar Pequeno

Eu tenho códigos e nomes repetidos com valores repetidos. Um em cada linha. Preciso que o código e o nome só apareçam uma vez e os valores quantas vezes forem repetidos, um ao lado do outro como no exemplo.
Responder

26/04/2017

Luiz Santos

Jocimar, veja o exemplo que montei.
Uma dica, é você trabalhar com os meses da data, a menos que você queira ver o dia mesmo.

Eu fiz no SQL Server, mas a lógica para o MySQL é a mesma.


IF OBJECT_ID('TEMPDB..#TESTE') IS NOT NULL
	DROP TABLE #TESTE

CREATE TABLE #TESTE (
	CODIGO VARCHAR(50),
	NOME VARCHAR(50),
	DATA VARCHAR(50),
	VALOR NUMERIC (18,2)
)

INSERT INTO #TESTE VALUES
('0001', 'FULANO DE TAL', '01/01/2016', 120.00),
('0001', 'FULANO DE TAL', '01/02/2016', 120.00),
('0002', 'BELTRANO DE TAL', '01/01/2016', 140.00),
('0003', 'CICRANO DE TAL', '01/01/2016', 110.00),
('0003', 'CICRANO DE TAL', '01/02/2016', 110.00)


SELECT TAB.CODIGO, TAB.NOME, SUM(TAB.JAN) AS JAN, SUM(TAB.FEV) AS FEV
FROM (
SELECT CODIGO, NOME, 
	   CASE WHEN DATA = '01/01/2016' THEN VALOR ELSE 0 END AS JAN, 
	   CASE WHEN DATA = '01/02/2016' THEN VALOR ELSE 0 END AS FEV 
  FROM #TESTE) AS TAB
GROUP BY TAB.CODIGO, TAB.NOME



Grande abraço
Responder

26/04/2017

Luiz Santos

Codigo traduzido para o MySQL



CREATE TEMPORARY TABLE TESTE (
	CODIGO VARCHAR(50),
	NOME VARCHAR(50),
	DATA VARCHAR(50),
	VALOR NUMERIC (18,2)
);

INSERT INTO TESTE VALUES
('0001', 'FULANO DE TAL', '01/01/2016', 120.00),
('0001', 'FULANO DE TAL', '01/02/2016', 120.00),
('0002', 'BELTRANO DE TAL', '01/01/2016', 140.00),
('0003', 'CICRANO DE TAL', '01/01/2016', 110.00),
('0003', 'CICRANO DE TAL', '01/02/2016', 110.00);

SELECT TAB.CODIGO, TAB.NOME, SUM(TAB.JAN) AS JAN, SUM(TAB.FEV) AS FEV
FROM (
SELECT CODIGO, NOME, 
CASE WHEN DATA = '01/01/2016' THEN VALOR ELSE 0 END AS JAN, 
CASE WHEN DATA = '01/02/2016' THEN VALOR ELSE 0 END AS FEV 
FROM TESTE) AS TAB
GROUP BY TAB.CODIGO, TAB.NOME;



Grande abs
Responder

26/04/2017

Jocimar Pequeno

Obrigado Luiz Fernando, irei testar. Forte abraço.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar