Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho o seguinte código que esta anexo onde não consigo ordenar os dados por mês/ano. Este é um banco Firebird. Alguém poderia me ajudar?
select
EXTRACT(month FROM data)||'/'||EXTRACT(YEAR FROM data) AS mes,
marca,
cod_cliente,
sum (vl_produto) as valor
from
(
select
pro.marca,
s.data,
cli.cod_cliente,
sum ((pe.total_liquido + pe.v_ipi + pe.v_icmss) - pe.desc_suframa) as vl_produto
from produtos_eventos pe
inner join saidas s on s.saida = pe.cod_operacao
inner join cfop cf on cf.cfop = pe.cfop
inner join clientes cli on s.cliente = cli.cliente
inner join produtos pro on pro.produto = pe.produto
where s.data BETWEEN '05/01/15' AND '06/02/16'
and pe.quantidade <> 0
and cf.nat_operacao in('5.101','6.101','5.102','5.403','6.102','6.107','6.108','6.403','5.551','6.551','5.933','6.933','7.551','6.108','6.109','6.110','7.101','7.102')
and cli.cod_cliente = 00000119
group by 1,2,3
union all
select
pro.marca,
en.data,
cli.cod_cliente,
sum ((pe.total_liquido + pe.v_ipi + pe.v_icmss) - pe.desc_suframa)* -1 as vl_produto
from produtos_eventos pe
inner join entradas en on en.entrada = pe.cod_operacao and pe.tipo_operacao = en.tipo_operacao_e and en.cancelada = 'F'
inner join cfop cf on cf.cfop = pe.cfop
inner join clientes cli on en.cliente = cli.cliente
inner join produtos pro on pro.produto = pe.produto
where en.data BETWEEN '05/01/15' AND '06/02/16'
and cf.nat_operacao in('1.201','2.201','1.202','2.202','2.203','3.201','3.202','1.411','2.411')
and cli.cod_cliente = 00000119
group by 1,2,3
union all
select
pro.marca,
en.data,
cli.cod_cliente,
sum ((pe.total_liquido + pe.v_ipi + v_icmss) - pe.desc_suframa)* -1 as vl_produto
from produtos_eventos pe
inner join entradas en on en.entrada = pe.cod_operacao and pe.tipo_operacao = en.tipo_operacao_e and en.cancelada = 'F'
inner join cfop cf on cf.cfop = pe.cfop
inner join clientes cli on en.cliente = cli.cliente
inner join produtos pro on pro.produto = pe.produto
where en.data BETWEEN '05/01/15' AND '06/02/16'
and cf.cfop in('107','125','153','155')
and cli.cod_cliente = 00000119
group by 1,2,3
) virtual
group by 1,2,3
order by 1O que sai errado ?
As datas aparecem na seguinte ordem: 10/2015, 11/2015, 9/2015....
Preciso que seja assim: 9/2015, 10/2015, 11/2015......
Observe que coloquei ORDER BY 1 (para ordenar por mês), mais não da certo
tente
lpad (EXTRACT(month FROM data)', 2, ''0')||'/'||EXTRACT(YEAR FROM data) AS mes,
vai ficar
09/2015 10/2015
>
tente
lpad (EXTRACT(month FROM data)', 2, ''0')||'/'||EXTRACT(YEAR FROM data) AS mes,
vai ficar
09/2015 10/2015
Motta, aqui esta apresentando o seguinte erro na linha que você me passou:
can't format message 13:896 -- message file C:\Windows\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 35.
', 2, ''0'.
syntax ....
lpad ( EXTRACT(month FROM data) ,2,'0') ||'/'||EXTRACT(YEAR FROM data) AS mes,
>
syntax ....
lpad ( EXTRACT(month FROM data) ,2,'0') ||'/'||EXTRACT(YEAR FROM data) AS mes,
Ótimo Motta, ordenou o mês mais agora não esta ordenando o ano. A ordem esta aparecendo da seguinte forma agora 02/2016, 02/2015, 03/2016, 03/2015....
Gostaria que a ordem respeitasse também o ano, dessa forma: 02/2015, 03/2015, 02/2016, 03/2016
tentei modificar o código que você me passou mais não consegui chegar nesse resultado
>
Ótimo Motta, ordenou o mês mais agora não esta ordenando o ano. A ordem esta aparecendo da seguinte forma agora 02/2016, 02/2015, 03/2016, 03/2015....
Gostaria que a ordem respeitasse também o ano, dessa forma: 02/2015, 03/2015, 02/2016, 03/2016
tentei modificar o código que você me passou mais não consegui chegar nesse resultado
Agora entendi melhor. lpad esta adicionando um zero a esquerda quando o valor possuir um digito. Isso esta fazendo ordenar o mês de forma correta.
Agora eu separei o mês do ano e agora esta ordenando tudo certinho. Depois para unir o mês com o ano eu concateno no PHP.
Muito obrigado pela ajuda.
o código ficou assim:
select
lpad ( EXTRACT(month FROM data) ,2,'0') as mes,
EXTRACT(YEAR FROM data) AS ano,
marca,
cod_cliente,
sum (vl_produto) as valor
from
(
select
pro.marca,
s.data,
cli.cod_cliente,
sum ((pe.total_liquido + pe.v_ipi + pe.v_icmss) - pe.desc_suframa) as vl_produto
from produtos_eventos pe
inner join saidas s on s.saida = pe.cod_operacao
inner join cfop cf on cf.cfop = pe.cfop
inner join clientes cli on s.cliente = cli.cliente
inner join produtos pro on pro.produto = pe.produto
where s.data BETWEEN '05/01/15' AND '06/02/16'
and pe.quantidade <> 0
and cf.nat_operacao in('5.101','6.101','5.102','5.403','6.102','6.107','6.108','6.403','5.551','6.551','5.933','6.933','7.551','6.108','6.109','6.110','7.101','7.102')
and cli.cod_cliente = 00000119
group by 1,2,3
union all
select
pro.marca,
en.data,
cli.cod_cliente,
sum ((pe.total_liquido + pe.v_ipi + pe.v_icmss) - pe.desc_suframa)* -1 as vl_produto
from produtos_eventos pe
inner join entradas en on en.entrada = pe.cod_operacao and pe.tipo_operacao = en.tipo_operacao_e and en.cancelada = 'F'
inner join cfop cf on cf.cfop = pe.cfop
inner join clientes cli on en.cliente = cli.cliente
inner join produtos pro on pro.produto = pe.produto
where en.data BETWEEN '05/01/15' AND '06/02/16'
and cf.nat_operacao in('1.201','2.201','1.202','2.202','2.203','3.201','3.202','1.411','2.411')
and cli.cod_cliente = 00000119
group by 1,2,3
union all
select
pro.marca,
en.data,
cli.cod_cliente,
sum ((pe.total_liquido + pe.v_ipi + v_icmss) - pe.desc_suframa)* -1 as vl_produto
from produtos_eventos pe
inner join entradas en on en.entrada = pe.cod_operacao and pe.tipo_operacao = en.tipo_operacao_e and en.cancelada = 'F'
inner join cfop cf on cf.cfop = pe.cfop
inner join clientes cli on en.cliente = cli.cliente
inner join produtos pro on pro.produto = pe.produto
where en.data BETWEEN '05/01/15' AND '06/02/16'
and cf.cfop in('107','125','153','155')
and cli.cod_cliente = 00000119
group by 1,2,3
) virtual
group by 1,2,3,4
order by 2,1
O que sai errado ?