Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Giuliano Santos

Ordenar pelo mês/ano

Recommended Posts

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 1 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente

lpad (EXTRACT(month FROM data)', 2, ''0')||'/'||EXTRACT(YEAR FROM data) AS mes,

vai ficar

 

09/2015 10/2015

Compartilhar este post


Link para o post
Compartilhar em outros sites

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'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

syntax ....

 

lpad ( EXTRACT(month FROM data) ,2,'0') ||'/'||EXTRACT(YEAR FROM data) AS mes,

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ó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 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.