Array
(
)

Order By por campo quot;virtualquot;

Helderjr
   - 15 dez 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


Fernando
   - 15 dez 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


Marcio.theis
   - 15 dez 2005

Como o colega Fernando mesmo falou, vc pode referenciar no order by, para vc poderia ficar assim:

#Código

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



Helderjr
   - 15 dez 2005

Valeu pessoal, funcionou do jeito q queria.


Jairroberto
   - 15 dez 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:

#Código


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


Fx|hand
   - 21 dez 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´...