Order By por campo quot;virtualquot;

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

Respostas

15/12/2005

Fernando

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


Responder Citar

15/12/2005

Marcio.theis

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



Responder Citar

15/12/2005

Helderjr

Valeu pessoal, funcionou do jeito q queria.


Responder Citar

15/12/2005

Jairroberto

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


Responder Citar

21/12/2005

Fx|hand

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´...


Responder Citar