Ordenar produtos por medida

11/03/2020

0

Boa tarde galera, blz?

Gostaria de saber se tem como ordenar os produtos de uma tabela por medida, por exemplo:
PP
P
M
G
GG
EGG

Porém preciso que seja dinâmico, pois o usuário pode cadastrar uma medida não pre-definida no sistema, impossibilitando que seja atribuído valores fixos para ordenação.
Ruddy Tomaz

Ruddy Tomaz

Responder

Posts

11/03/2020

Lucas Lima

Olá ruddy ,

Tente fazer utilizando CASE do SQL

ORDER BY (
    CASE 
    
    WHEN ''PP''
    THEN 1
    
    WHEN ''P''
    THEN 2
    
    WHEN ''M''
    THEN 3
    
    WHEN ''G''
    THEN 4
    
    WHEN ''GG''
    THEN 5
    
    WHEN ''EGG''
    THEN 6
    
    END
) ASC
Responder

11/03/2020

Lucas Lima

Olá ruddy ,

Tente fazer utilizando CASE do SQL

ORDER BY (
    CASE sua_coluna_aqui
    
    WHEN ''PP''
    THEN 1
    
    WHEN ''P''
    THEN 2
    
    WHEN ''M''
    THEN 3
    
    WHEN ''G''
    THEN 4
    
    WHEN ''GG''
    THEN 5
    
    WHEN ''EGG''
    THEN 6
    
    END
) ASC
Responder

16/03/2020

Ruddy Tomaz

Olá ruddy ,

Tente fazer utilizando CASE do SQL

ORDER BY (
    CASE sua_coluna_aqui
    
    WHEN ''PP''
    THEN 1
    
    WHEN ''P''
    THEN 2
    
    WHEN ''M''
    THEN 3
    
    WHEN ''G''
    THEN 4
    
    WHEN ''GG''
    THEN 5
    
    WHEN ''EGG''
    THEN 6
    
    END
) ASC


Bom dia Lucas

Desculpe a demora na resposta, mas no serviço está uma loucura. Sua dica me atendeu super bem. Agradeço super, pois ficou perfeito. Segue abaixo meu código. Coloquei todas as variações de digitação que podem ocorrer

produtos.Close;
produtos.SQL.Clear;
produtos.SQL.Add('select * from produtos where descricao like '+''''+'%'+editconsulta.Text+'%'+''' or codigo like '+''''+'%'+editconsulta.Text+'%'+'''');
produtos.SQL.Add('ORDER BY codigo, cor, (CASE medida WHEN ''PP'' or '' PP '' or '' PP'' or ''PP '' or ''pp'' or '' pp '' or '' pp'' or ''pp '' THEN 1');
produtos.SQL.Add('WHEN ''P'' or '' P '' or '' P'' or ''P '' or ''p'' or '' p '' or '' p'' or ''p '' THEN 2');
produtos.SQL.Add('WHEN ''M'' or '' M '' or '' M'' or ''M '' or ''m'' or '' m '' or '' m'' or ''m '' THEN 3');
produtos.SQL.Add('WHEN ''G'' or '' G '' or '' G'' or ''G '' or ''g'' or '' g '' or '' g'' or ''g '' THEN 4');
produtos.SQL.Add('WHEN ''GG'' or '' GG '' or '' GG'' or ''GG '' or ''gg'' or '' gg '' or '' gg'' or ''gg '' THEN 5');
produtos.SQL.Add('WHEN ''EGG'' or '' EGG '' or '' EGG'' or ''EGG '' or ''egg'' or '' egg '' or '' egg'' or ''egg ''');
produtos.SQL.Add('or ''EXG'' or '' EXG '' or '' EXG'' or ''EXG '' or ''exg'' or '' exg '' or '' exg'' or ''exg '' THEN 6 END ) ASC');
produtos.Open;
Responder

16/03/2020

Emerson Nascimento

legal que a solução funcionou.
agora faça uma pequena alteração, para que tenha melhor apresentação:
produtos.SQL.Add('select * from produtos');
produtos.SQL.Add('where descricao like ''%'+editconsulta.Text+'%'' or codigo like ''%'+editconsulta.Text+'%''');
produtos.SQL.Add('ORDER BY codigo, cor,');
produtos.SQL.Add('(CASE UPPER(LTRIM(RTRIM(medida)))');
produtos.SQL.Add('WHEN ''PP'' THEN 1');
produtos.SQL.Add('WHEN ''P'' THEN 2');
produtos.SQL.Add('WHEN ''M'' THEN 3');
produtos.SQL.Add('WHEN ''G'' THEN 4');
produtos.SQL.Add('WHEN ''GG'' THEN 5');
produtos.SQL.Add('ELSE 6 END) ASC');
produtos.Open;
Responder

16/03/2020

Ruddy Tomaz

legal que a solução funcionou.
agora faça uma pequena alteração, para que tenha melhor apresentação:
produtos.SQL.Add('select * from produtos');
produtos.SQL.Add('where descricao like ''%'+editconsulta.Text+'%'' or codigo like ''%'+editconsulta.Text+'%''');
produtos.SQL.Add('ORDER BY codigo, cor,');
produtos.SQL.Add('(CASE UPPER(LTRIM(RTRIM(medida)))');
produtos.SQL.Add('WHEN ''PP'' THEN 1');
produtos.SQL.Add('WHEN ''P'' THEN 2');
produtos.SQL.Add('WHEN ''M'' THEN 3');
produtos.SQL.Add('WHEN ''G'' THEN 4');
produtos.SQL.Add('WHEN ''GG'' THEN 5');
produtos.SQL.Add('ELSE 6 END) ASC');
produtos.Open;


Perfeito meu amigo. Tudo funcionando corretamente.

Mais uma vez obrigado pela ajuda.

Com isto, encerro o tópico.

RESOLVIDO
Responder

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

Aceitar