Fórum Ordenar registros - complicado #331214

16/10/2006

0

Pessoal, Bom dia!!!

Estou com o problema e gostaria muito da ajuda de vocês.

Tenho um select que me retorna 3 campos: código( integer ), artigo( string ) e título( string ).

o select está da seguinte forma:

[color=red:2dfd1440b6]
select codigo, artigo, titulo
from acervo
order by titulo
[/color:2dfd1440b6]

Este select me retorna o seguinte resultado:

codigo    artigo  titulo 
26          NULL   Case Problems in finance
3           NULL   Contabilidade gerencial
19          NULL   Contabilidade industrial
34          O      controle de qualidade na industria paulista
44          NULL   Economia das empresas
49          NULL   Estruturacao das escolas e institutos de administracao
1           Uma    experiência de instrução programada em orcamento e administracao financeira
13          NULL   Gerencia de Materiais
40          NULL   Gerencia por objetivos
17          NULL   Historia administrativa do Brasil
.
.
.


Vejam que a ordenação está de acordo com o titulo.

Eu gostaria que ordenasce respeitando a o conteudo dos dois campos ( artigo e titulo ), pra ficar desse jeito, ou seja, respeitando as letras do artigo e do titulo:

codigo    artigo  titulo 
26          NULL   Case Problems in finance
3           NULL   Contabilidade gerencial
19          NULL   Contabilidade industrial
44          NULL   Economia das empresas
49          NULL   Estruturacao das escolas e institutos de administracao
administracao financeira
13          NULL   Gerencia de Materiais
40          NULL   Gerencia por objetivos
17          NULL   Historia administrativa do Brasil
34          O      controle de qualidade na industria paulista
1           Uma    experiência de instrução programada em orcamento e 
.
.
.


Acho que não tem como fazer isso com um select, mas pelo delphi sim.

Alguém tem alguma dica? Será que tem como eu jogar isso em um array e a partir daí ordenar da forma que eu preciso?

Desde já, agradeço-lhes...


Cristianojedi

Cristianojedi

Responder

Posts

16/10/2006

Ricardo_ascii

Pessoal, Bom dia!!! Estou com o problema e gostaria muito da ajuda de vocês. Tenho um select que me retorna 3 campos: código( integer ), artigo( string ) e título( string ). o select está da seguinte forma: [color=red:99b1e18b4b]
select codigo, artigo, titulo
from acervo
order by titulo
[/color:99b1e18b4b] Este select me retorna o seguinte resultado: Coloque no order by assim: order by titulo, artigo ou order by artigo, titulo
codigo    artigo  titulo 
26          NULL   Case Problems in finance
3           NULL   Contabilidade gerencial
19          NULL   Contabilidade industrial
34          O      controle de qualidade na industria paulista
44          NULL   Economia das empresas
49          NULL   Estruturacao das escolas e institutos de administracao
1           Uma    experiência de instrução programada em orcamento e administracao financeira
13          NULL   Gerencia de Materiais
40          NULL   Gerencia por objetivos
17          NULL   Historia administrativa do Brasil
.
.
.
Vejam que a ordenação está de acordo com o titulo. Eu gostaria que ordenasce respeitando a o conteudo dos dois campos ( artigo e titulo ), pra ficar desse jeito, ou seja, respeitando as letras do artigo e do titulo:
codigo    artigo  titulo 
26          NULL   Case Problems in finance
3           NULL   Contabilidade gerencial
19          NULL   Contabilidade industrial
44          NULL   Economia das empresas
49          NULL   Estruturacao das escolas e institutos de administracao
administracao financeira
13          NULL   Gerencia de Materiais
40          NULL   Gerencia por objetivos
17          NULL   Historia administrativa do Brasil
34          O      controle de qualidade na industria paulista
1           Uma    experiência de instrução programada em orcamento e 
.
.
.
Acho que não tem como fazer isso com um select, mas pelo delphi sim. Alguém tem alguma dica? Será que tem como eu jogar isso em um array e a partir daí ordenar da forma que eu preciso? Desde já, agradeço-lhes...



Responder

Gostei + 0

16/10/2006

Ricardo_ascii

Se eu entendi direito coloque assim no order by

order by titulo, artigo ou order by artigo, titulo


Responder

Gostei + 0

16/10/2006

Cristianojedi

Bom, não é isso que eu quero ricardo_ascii...

Vou tentar ser mais claro.

Tenho uma tabela com os campos codigo, artigo e titulo. Se eu fizer um select assim: select codigo, artigo, titulo from acervo order by titulo - o resultado será este:

codigo     artigo     titulo
3             Um        Amor de verdade
1             NULL      Caça Fantasmas
4             A           Casa
2             O           Tesouro
5             NULL      Vingança


O resultado desde select, vai exibir da seguinte forma no meu relatório abaixo. Lembrando que o campo artigo e titulo são concatenados.

codigo     titulo
3             Um Amor de verdade
1             Caça Fantasmas
4             A Casa
2             O Tesouro
5             Vingança


Só que eu quero que o relatório exiba os dados da seguinte forma abaixo no meu relatório:

codigo     titulo
4             A Casa
1             Caça Fantasmas
2             O Tesouro
3             Um Amor de verdade
5             Vingança

Deu pra pegar? A ordenação que eu quero fazer compara qual é a letra do campo artigo e do campo titulo. Conforme for, vai ordenando


Responder

Gostei + 0

16/10/2006

Macario

Ola.

O colega [b:c05283ab78]ricardo_ascii[/b:c05283ab78] indicou corretamente a forma de ordenacao.

Exemplo:
Order By Artigo, Titulo.


O que pode estar ocorrendo e a forma no qual voce ordena via Delphi.

Que deve obdecer a mesma do select.


Exemplo:
ClientDataSet.IndexFieldNames := ´Artigo;Titulo´;



Espero que lhe ajude;


8) [/b]


Responder

Gostei + 0

16/10/2006

Ricardo_ascii

Uma outra opção seria vc. pode fazer o filtro dos registros e jogar para uma tabela temporária ja concatenados. Muda o indice da tabela temporária para esse campo concatenado e adiciona no essa tabela no relatório que irá imprimir.


Ricardo


Responder

Gostei + 0

16/10/2006

Cristianojedi

Eu sei que se eu colocar no order by artigo, titulo, o select vai ordenar primeiro pegando os valores do campo artigo e depois do campo titulo, correto?

Mas não é isto que eu quero!!!

Se eu tenho um registro com o campo artigo = Uma e o titulo = Casa e um outro registro com o campo artigo = NULL e o campo titulo = Maquinas, se eu colocar ORDER ARTIGO, TITULO, vai me retornar o seguinte:

Uma Casa
Maquinas

Mas eu quero que ele me retorne:

Maquinas
Uma Casa

Pois ´M´ de Máquinas é menor que ´U´ de Uma.

Agora deu pra sacar?

Abraços!!!


Responder

Gostei + 0

16/10/2006

Ricardo_ascii

Eu sei que se eu colocar no order by artigo, titulo, o select vai ordenar primeiro pegando os valores do campo artigo e depois do campo titulo, correto? Mas não é isto que eu quero!!! Se eu tenho um registro com o campo artigo = Uma e o titulo = Casa e um outro registro com o campo artigo = NULL e o campo titulo = Maquinas, se eu colocar ORDER ARTIGO, TITULO, vai me retornar o seguinte: Uma Casa Maquinas Mas eu quero que ele me retorne: Maquinas Uma Casa Pois ´M´ de Máquinas é menor que ´U´ de Uma. Agora deu pra sacar? Abraços!!!


Vc. viu o que eu postei sobre a tabela temporária?


Responder

Gostei + 0

16/10/2006

Macario

Ola.

Vamo tentar o seguinte.


select isNull(Arqtigo,´ ´), titulo from tabela
order by artigo, titulo


Inclua um espaco ou simplesmente ´´(branco) quando o campo for NULL, pois assim a ordenacao tem que ficar da forma que voce precisa.


Responder

Gostei + 0

16/10/2006

Cristianojedi

Colega,

Desculpe-me mas eu não tinha visto esta solução que você tinha postado. Mas não teria como fazer isto sem eu precisar de criar tabela temporária, não?

Obrigado pela solução!!!

Cristiano


Responder

Gostei + 0

16/10/2006

Cristianojedi

Macario,

select codigo, isnull(artigo,´´), titulo
from acervo
order by artigo, titulo


Desta forma não deu certo!!! Ele gerou o seguinte resultado:

codigo           titulo                                                                                                                                                                                                                                                     

15               Administracao industrial e geral
16               Administração industrial e geral
42               Administracao por sistemas
37               Introdução a administração
33               Introducao a administracao financeira
8                Organizacao do trabalho
14               Origens e aplicacoes de recursos e economia financeira
12               Pratica de analise economico-financeira das empresas
22               Processo decisorio
46               Retorno do investimento
28               Streamlining
11               Teoria geral de administracao
20          A    justica administrativa na Franca
5           A    justica administrativa no Brasil
34          O    controle de qualidade na industria paulista
31          O    processo de producao
23          O    supermanager
1           Uma  experiência de instrução programada em orcamento e administracao financeira


Obrigado pela dica.


Responder

Gostei + 0

16/10/2006

Macario

Ola.

Acho que entao a concatenacao deve ser ja no select, mas isso nao sei como ficaria.


Responder

Gostei + 0

16/10/2006

Cristianojedi

De qualquer forma, obrigado!!!

Acho que vou ter que usar tabela temporária mesmo, o que eu não queria, como o outro colega falou em uma das respostas acima.

Flw!!!

Cristiano


Responder

Gostei + 0

16/10/2006

Ricardo_ascii

Pelo que eu sei o select permite criar campo virtual somente em operações matemáticas para obter o resultado de alguma operação. Agora no caso de junção de duas strings eu desconheço.

No seu caso eu faria uma dessas alternativas:

a:) Criar uma tabela temporária e nessa tabela jogaria concatenado o campo artigo + titulo.


B) Se realmente vc. deseja fazer esse relatório por sql(select) eu faria o seguinte.
Criaria + um campo na tabela acervo. Meu arquivo ficaria assim: codigo, adjetivo, titulo e adjetivo_titulo. No evento before post do table(acervo) eu coloco a seguinte instrução: adjetivo_titulo:=adjetivo+´ ´+titulo

Aí sim vc. pode fazer o sql sem problemas. Seleciona os campos e coloca order by adjetivo_titulo

Ricardo


Responder

Gostei + 0

16/10/2006

Cristianojedi

Muito obrigado pelas dicas, Ricardo.


Cristiano


Responder

Gostei + 0

16/10/2006

Ricardo_ascii

Corrigindo,

troque o que eu disse de adjetivo por artigo...rss(desculpe)

Abraço, Ricardo


Responder

Gostei + 0

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

Aceitar