Ordenar registros - complicado
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][/color:2dfd1440b6]
Este select me retorna o seguinte resultado:
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:
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...
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
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
Curtidas 0
Respostas
Ricardo_ascii
16/10/2006
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][/color:99b1e18b4b]
Este select me retorna o seguinte resultado:
Coloque no order by assim:
order by titulo, artigo ou order by artigo, titulo
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:
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...
select codigo, artigo, titulo from acervo order by 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 . . .
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 . . .
GOSTEI 0
Ricardo_ascii
16/10/2006
Se eu entendi direito coloque assim no order by
order by titulo, artigo ou order by artigo, titulo
order by titulo, artigo ou order by artigo, titulo
GOSTEI 0
Cristianojedi
16/10/2006
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:
O resultado desde select, vai exibir da seguinte forma no meu relatório abaixo. Lembrando que o campo artigo e titulo são concatenados.
Só que eu quero que o relatório exiba os dados da seguinte forma abaixo no meu relatório:
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
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
GOSTEI 0
Macario
16/10/2006
Ola.
O colega [b:c05283ab78]ricardo_ascii[/b:c05283ab78] indicou corretamente a forma de ordenacao.
Exemplo:
O que pode estar ocorrendo e a forma no qual voce ordena via Delphi.
Que deve obdecer a mesma do select.
Exemplo:
Espero que lhe ajude;
8) [/b]
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]
GOSTEI 0
Ricardo_ascii
16/10/2006
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
Ricardo
GOSTEI 0
Cristianojedi
16/10/2006
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!!!
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!!!
GOSTEI 0
Ricardo_ascii
16/10/2006
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?
GOSTEI 0
Macario
16/10/2006
Ola.
Vamo tentar o seguinte.
Inclua um espaco ou simplesmente ´´(branco) quando o campo for NULL, pois assim a ordenacao tem que ficar da forma que voce precisa.
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.
GOSTEI 0
Cristianojedi
16/10/2006
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
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
GOSTEI 0
Cristianojedi
16/10/2006
Macario,
Desta forma não deu certo!!! Ele gerou o seguinte resultado:
Obrigado pela dica.
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.
GOSTEI 0
Macario
16/10/2006
Ola.
Acho que entao a concatenacao deve ser ja no select, mas isso nao sei como ficaria.
Acho que entao a concatenacao deve ser ja no select, mas isso nao sei como ficaria.
GOSTEI 0
Cristianojedi
16/10/2006
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
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
GOSTEI 0
Ricardo_ascii
16/10/2006
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
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
GOSTEI 0
Cristianojedi
16/10/2006
Muito obrigado pelas dicas, Ricardo.
Cristiano
Cristiano
GOSTEI 0
Ricardo_ascii
16/10/2006
Corrigindo,
troque o que eu disse de adjetivo por artigo...rss(desculpe)
Abraço, Ricardo
troque o que eu disse de adjetivo por artigo...rss(desculpe)
Abraço, Ricardo
GOSTEI 0
Cabreu.jr
16/10/2006
Ai parceiro essa é mole: é só passar o orde by pelo indice do campo
Ex: Se o campo for o primeiro do select basta dar ORDER BY 1 se for o segundo ORDER BY 2 e assim por diante
Ex: Se o campo for o primeiro do select basta dar ORDER BY 1 se for o segundo ORDER BY 2 e assim por diante
GOSTEI 0