Order By por campo quot;virtualquot;

Delphi

15/12/2005

Ola pessoal tenho o seguinte select

Select Tra.*, (select Reg.Nome from CADREGIAO Reg where Reg.Codigo = Tra.Regiao) as NRegiao from CadTrans Tra Where Tra.Codigo <> 0´

A onde o NRegiao é um campo ´virtual´ com o nome da regiao, campo este vindo da tabela cadregiao vinculado ao campo regiao da tabela cadtrans.

Tem como por em ordem deste campo NRegiao, já tentei

order by Tra.NRegiao order by Reg.NRegiao order by NRegiao e não funcionou.

Uso DbExpress com Firebird


Helderjr

Helderjr

Curtidas 0

Respostas

Fernando

Fernando

15/12/2005

coloque order by e a coluna que esta ocampo virtual

tipo

SELECT NOME,ENDERECO, SETOR FROM CLIENTE
ORDER BY 1 PARA NOME 2 PARA ENDERECO 3 PARA SETOR OU QUALQUER Q VC QUEIRA


SELECT NOME,ENDERECO, SETOR FROM CLIENTE
ORDER BY 1


GOSTEI 0
Marcio.theis

Marcio.theis

15/12/2005

Como o colega [b:98748fba1a]Fernando[/b:98748fba1a] mesmo falou, vc pode referenciar no order by, para vc poderia ficar assim:

Select (select Reg.Nome from CADREGIAO Reg where Reg.Codigo = Tra.Regiao) as NRegiao, Tra.*
from CadTrans Tra 
Where Tra.Codigo <> 0
order by 1



GOSTEI 0
Helderjr

Helderjr

15/12/2005

Valeu pessoal, funcionou do jeito q queria.


GOSTEI 0
Jairroberto

Jairroberto

15/12/2005

Olá, pessoal!

Na minha opinião o suposto ganho de performance alegado por alguns desenvolvedores no uso de sub-selects para campos ´lookup´ não justifica a sua utilização no lugar do ´JOIN´. Uso ´JOIN´ sem qualquer problema de performance e considero que sua utilização deixa as cláusulas SQL muito mais ´limpas´ e legíveis. Neste exemplo, a alternativa com ´JOIN´ seria mais ou menos assim:

SELECT
  Tra.*
  , Reg.Nome AS NRegiao
FROM
  CadTrans Tra
  LEFT JOIN CADREGIAO Reg ON (Reg.Codigo = Tra.Regiao)
WHERE
  Tra.Codigo <> 0
ORDER BY
  Reg.Nome


Um abraço,
Jair


GOSTEI 0
Fx|hand

Fx|hand

15/12/2005

q coisa naum.... firebird num prepara a tabela antis de fazer o order by....
provavelmente pra ganhar mais performance ele jah monta a tabela utilizando o order by como referencia... por isso ele precisa de um ´codigo´ ou do ´nome´ da tabela, naum um nome ´virtual´...


GOSTEI 0
POSTAR