É muito comum ordenar uma tabela para que a disposição dos dados fique de acordo com a necessidade. E também é muito importante saber alguns detalhes de como é possível ordenar uma tabela, e conhecer as variações que podem ser aplicadas.
Dentro do
O que é um
Também é usado em conjunto com o comando
Como funciona o
O comando
A forma mais simples de uso é ordenar uma tabela sem especificar colunas. Se nenhuma coluna for especificada, a ordenação será feita por todas as colunas obedecendo a ordem das colunas, ou seja, da primeira até a última. A não ser que a tabela tenha sido declara com alguma chave, neste caso a ordenação será feita pela chave.
Outro detalhe importante é a questão da direção da ordenação, para dizer se é para ordenar de forma crescente ou decrescente. Para ordenar de forma crescente usar o argumento
Um exemplo da forma mais simples ficaria assim:
No exemplo acima a tabela
Para ordenar especificando uma ou mais colunas, basta usar o complemento
Um exemplo especificando duas colunas ficar assim:
No exemplo acima a tabela
O exemplo abaixo tem o mesmo efeito do exemplo acima, porém deixando explícito qual o sentido da ordenação:
No exemplo acima a tabela
Quando o sentido da ordenação for o mesmo para todas as colunas, também é possível deixar explícito o sentido antes do
No exemplo acima a tabela
Para que fique claro, usando as três formas abaixo, o resultado será o mesmo. Na primeira deixando o sentido implícito, ou seja, sem informar. Na segunda informando o sentido coluna por coluna. E na terceira informando o sentido para todas as colunas de uma vez.
No caso da ordenação decrescente é necessário informar obrigatoriamente o sentido, ou seja, de forma explícita. Deve ser aplicado como na segunda e terceira formas mostradas acima, com o sentido crescente.
Informando coluna por coluna:
Informando para todas as colunas de uma vez:
Nos dois exemplos acima a tabela
Para que fique claro, usando as duas formas abaixo, o resultado será o mesmo. Na primeira informando o sentido coluna por coluna. E na segunda informando o sentido para todas as colunas de uma vez.
Outro detalhe importante quando usar o sentido de ordenação antes do
No exemplo acima a tabela
Um parâmetro muito interessante é o uso do
Um ótimo cenário de exemplo é usando as vogais. Imagine uma tabela contendo quatro linhas, e que uma das colunas com tipo alfanumérico esteja preenchida com os dados "E", "I", "É" e "A". Repare que uma das vogais está com a acento agudo.
Se ordenar sem o parâmetro
A E I É
Se ordenar com o parâmetro
A E É I
Informando o parâmetro em coluna:
Informando o parâmetro para todas as colunas da tabela:
No primeiro exemplo acima a tabela
Já no segundo exemplo a mesma tabela será ordenada na forma de texto por todas as colunas. Este caso apenas funcionará se as colunas alfanuméricas forem as primeiras da tabela.
Este parâmetro eu não conhecia e tem uma funcionalidade muito útil. É o parâmetro
Quando uma tabela é ordenada por uma coluna que possui dados que se repetem, o que acontece com as outras colunas que não foram informadas no comando? As informações dessas colunas, como não foram informadas na ordenação, serão ordenadas de forma aleatória. Isso quer dizer que a cada novo comando de ordenação esses dados poderão ficar em posições diferentes.
O uso do parâmetro
Vamos ver um cenário prático para ajudar a entender. Imagine a tabela
Repare que o cliente "Anderson" se repete em duas linhas com produtos diferentes. Se for aplicado um comando
Usando o parâmetro
Esse comando é bem funcional quando usado na apresentação de relatórios. Ele garante que os dados não ficarão diferentes ao reprocessar ou atualizar as informações da tela.
O que deixei por último não é o menos importante dos parâmetros. Este é um parâmetro interessante para deixar a ordenação de forma dinâmica. Consiste em informar uma tabela contendo as colunas que deverão ser ordenadas. Supondo que a tabela de colunas seja
Detalhe para os parenteses. Só assim o comando entende que é uma tabela de colunas. Sem eles o programa nem será ativado.
Para declarar a tabela use o tipo standard
E você, já precisou usar alguma das variações? Tem alguma experiência sobre este comando que gostaria de compartilhar? Tem alguma dúvida?
Um grande abraço e até a próxima.
Dentro do
ABAP
isso é feito através do comando SORT
. E ele é essencial para que outros comandos também funcionem. Esta é mais uma postagem da série COMANDOS.O que é um SORT
?
SORT
é um comando da plataforma ABAP
usado para ordenar os dados em uma tabela lógica. A ordenação é importante para organizar os dados antes de exibí-los em um relatório, ou para deixar a tabela apta para uma pesquisa ou leitura direta.Também é usado em conjunto com o comando
DELETE ADJACENT DUPLICATES
e é essencial para o perfeito funcionamento deste último citado. Outra aplicação em conjunto é com o comando READ TABLE
com o parâmetro BINARY SEARCH
.Como funciona o SORT
?
O comando
SORT
tem algumas variações de uso bem interessantes. Algumas eu nem conhecia, passei a conhecer quando comecei a estudar sobre o tema antes de escrever esta postagem.A forma mais simples de uso é ordenar uma tabela sem especificar colunas. Se nenhuma coluna for especificada, a ordenação será feita por todas as colunas obedecendo a ordem das colunas, ou seja, da primeira até a última. A não ser que a tabela tenha sido declara com alguma chave, neste caso a ordenação será feita pela chave.
Outro detalhe importante é a questão da direção da ordenação, para dizer se é para ordenar de forma crescente ou decrescente. Para ordenar de forma crescente usar o argumento
ASCENDING
e de forma descrescente usar o argumento DESCENDING
. Se nada for informado quanto à direção, automaticamente será usada a forma crescente.Um exemplo da forma mais simples ficaria assim:
SORT t_dados.
No exemplo acima a tabela
T_DADOS
será ordenada no sentido crescente por todas as colunas da primeira até a última. Se a tabela T_DADOS
for declarada com alguma chave, a ordenação será feita pelos campos da chave.Colunas e sentidos de ordenação
Para ordenar especificando uma ou mais colunas, basta usar o complemento
BY
e em seguida informar as colunas. Se for duas ou mais separe por espaços.Um exemplo especificando duas colunas ficar assim:
SORT t_dados BY data valor.
No exemplo acima a tabela
T_DADOS
será ordenada apenas pelas colunas DATA
e VALOR
. As duas no sentido crescente, pelo fato de não ter o sentido informado.O exemplo abaixo tem o mesmo efeito do exemplo acima, porém deixando explícito qual o sentido da ordenação:
SORT t_dados BY data ASCENDING valor ASCENDING.
No exemplo acima a tabela
T_DADOS
será ordenada apenas pelas colunas DATA
e VALOR
, as duas no sentido crescente.Quando o sentido da ordenação for o mesmo para todas as colunas, também é possível deixar explícito o sentido antes do
BY
:SORT t_dados ASCENDING BY data valor.
No exemplo acima a tabela
T_DADOS
será ordenada apenas pelas colunas DATA
e VALOR
, as duas no sentido crescente.Para que fique claro, usando as três formas abaixo, o resultado será o mesmo. Na primeira deixando o sentido implícito, ou seja, sem informar. Na segunda informando o sentido coluna por coluna. E na terceira informando o sentido para todas as colunas de uma vez.
SORT t_dados BY data valor.
SORT t_dados BY data ASCENDING valor ASCENDING.
SORT t_dados ASCENDING BY data valor.
No caso da ordenação decrescente é necessário informar obrigatoriamente o sentido, ou seja, de forma explícita. Deve ser aplicado como na segunda e terceira formas mostradas acima, com o sentido crescente.
Informando coluna por coluna:
SORT t_dados BY data DESCENDING valor DESCENDING.
Informando para todas as colunas de uma vez:
SORT t_dados DESCENDING BY data valor.
Nos dois exemplos acima a tabela
T_DADOS
será ordenada apenas pelas colunas DATA
e VALOR
, as duas no sentido decrescente.Para que fique claro, usando as duas formas abaixo, o resultado será o mesmo. Na primeira informando o sentido coluna por coluna. E na segunda informando o sentido para todas as colunas de uma vez.
SORT t_dados BY data DESCENDING valor DESCENDING.
SORTt_dados DESCENDING BY data valor.
Outro detalhe importante quando usar o sentido de ordenação antes do
BY
é que ele será aplicado em todas as colunas. Desta forma, se em alguma coluna for necessário ordenar em outro sentido, o mesmo deverá estar explicito à direta da coluna:SORT t_dados DESCENDING BY data cidade ASCENDING valor.
No exemplo acima a tabela
T_DADOS
será ordenada apenas pelas colunas DATA
, CIDADE
e VALOR
, sendo primeiro por DATA
decrescente, depois por CIDADE
crescente e por último por VALOR
decrescente.Ordenação de textos
Um parâmetro muito interessante é o uso do
AS TEXT
. Ele pode ser usado de forma geral para toda tabela ou especificando em uma ou mais colunas. O uso deste parâmetro faz com que as colunas com tipos alfanuméricos sejam classificadas desconsiderando acentos. Sem este parâmetro, os acentos serão considerados e irão para o fim da ordenação.Um ótimo cenário de exemplo é usando as vogais. Imagine uma tabela contendo quatro linhas, e que uma das colunas com tipo alfanumérico esteja preenchida com os dados "E", "I", "É" e "A". Repare que uma das vogais está com a acento agudo.
Se ordenar sem o parâmetro
AS TEXT
a vogal com acento ficará por último.A E I É
Se ordenar com o parâmetro
AS TEXT
a vogal com acento será considerada como se não tivesse o acento, ficando logo depois da mesma vogal sem acento.A E É I
Informando o parâmetro em coluna:
SORT t_dados BY cidade AS TEXT.
Informando o parâmetro para todas as colunas da tabela:
SORT t_dados AS TEXT.
No primeiro exemplo acima a tabela
T_DADOS
será ordenada na forma de texto pela colunas CIDADE
.Já no segundo exemplo a mesma tabela será ordenada na forma de texto por todas as colunas. Este caso apenas funcionará se as colunas alfanuméricas forem as primeiras da tabela.
Ordenação estável
Este parâmetro eu não conhecia e tem uma funcionalidade muito útil. É o parâmetro
STABLE
. Já o tinha visto algumas vezes na ajuda e nunca tinha entendido até colocar em prática durante o estudo desta postagem.Quando uma tabela é ordenada por uma coluna que possui dados que se repetem, o que acontece com as outras colunas que não foram informadas no comando? As informações dessas colunas, como não foram informadas na ordenação, serão ordenadas de forma aleatória. Isso quer dizer que a cada novo comando de ordenação esses dados poderão ficar em posições diferentes.
O uso do parâmetro
STABLE
é para que essa situação não aconteça. Apenas na primeira ordenação os dados das colunas não informadas serão de forma aleatória. Em cada novo comando de ordenação com STABLE
os dados serão preservados na mesma posição.Vamos ver um cenário prático para ajudar a entender. Imagine a tabela
T_DADOS
com as seguintes colunas e registros:Repare que o cliente "Anderson" se repete em duas linhas com produtos diferentes. Se for aplicado um comando
SORT
pela colunas CIDADE
e CLIENTE
, os dados da coluna PRODUTO seriam ordenados de forma aleatória, pois esta coluna não foi especificada no comando. A cada novo comando os produtos "geladeira" e "fogão" podem acabar trocando de lugar. Exemplo do comando:SORT t_dados BY cidade cliente.
Usando o parâmetro
STABLE
os produtos "geladeira" e "fogão" não irão ficar trocando de lugar, preservando sempre os dados. Exemplo do comando:SORT t_dados STABLE BY cidade cliente.
Esse comando é bem funcional quando usado na apresentação de relatórios. Ele garante que os dados não ficarão diferentes ao reprocessar ou atualizar as informações da tela.
Ordenação dinâmica
O que deixei por último não é o menos importante dos parâmetros. Este é um parâmetro interessante para deixar a ordenação de forma dinâmica. Consiste em informar uma tabela contendo as colunas que deverão ser ordenadas. Supondo que a tabela de colunas seja
T_COLUNAS
, basicamente o comando fica assim:SORT t_dados BY (t_colunas).
Detalhe para os parenteses. Só assim o comando entende que é uma tabela de colunas. Sem eles o programa nem será ativado.
Para declarar a tabela use o tipo standard
ABAP_SORTORDER_TAB
que existe exatamente pra isso. Ele possui uma estrutura bem simples, com apenas três colunas. A primeira é a coluna NAME
, onde deve ser preenchido o nome da coluna para ordenação. A segunda é a coluna DESCENDING
, onde deve ser preenchido com um "X" se o sentido for decrescente. Se o sentido for crescente não preencha nada. E a terceira é a coluna ASTEXT
, onde deve ser preenchido com "X" se precisar ser aplicada a ordenação por texto.E você, já precisou usar alguma das variações? Tem alguma experiência sobre este comando que gostaria de compartilhar? Tem alguma dúvida?
Um grande abraço e até a próxima.
Postar um comentário