2010-10-07 20 views
11

Nerede, hesapladığınız bir alanı kullanmanın bir yolu var?Nerede, hesaplanan bir alanı kullanmanın bir yolu var?

Ben

SELECT a, b, a+b as TOTAL FROM (
    select 7 as a, 8 as b FROM DUAL 
    UNION ALL 
    select 8 as a, 8 as b FROM DUAL 
    UNION ALL 
    select 0 as a, 0 as b FROM DUAL 
) 
WHERE TOTAL <> 0 
; 

böyle bir şey yapmak istiyorum ama ORA-00904 alıyorum: "TOTAL": geçersiz tanımlayıcı.

Yani Mantıken

SELECT a, b, a+b as TOTAL FROM (
    select 7 as a, 8 as b FROM DUAL 
    UNION ALL 
    select 8 as a, 8 as b FROM DUAL 
    UNION ALL 
    select 0 as a, 0 as b FROM DUAL 
) 
WHERE a+b <> 0 
; 

cevap

31

, select fıkra değerlendirdi bir sorgunun son parçalarından biridir kullanmak zorunda, bu yüzden diğer adları ve türetilmiş sütunlar kullanılamaz. Türetilmiş tablo kullanma

(. mantıksal son olur order by, hariç olmak üzere) bu çevrede uzaklıktadır:

select * 
from (SELECT a, b, a+b as TOTAL FROM ( 
      select 7 as a, 8 as b FROM DUAL 
      UNION ALL 
      select 8 as a, 8 as b FROM DUAL 
      UNION ALL 
      select 0 as a, 0 as b FROM DUAL) 
    ) 
WHERE TOTAL <> 0 
; 
+0

da bir CTE kullanabilirsiniz. – onedaywhen

+1

Bunu bir Depolanmış Prosedürde deniyordum ve yukarıdaki sözdizimi türetilmiş tabloyu takmadığı sürece çalışmaz. – DilbertDave

+0

@DilbertDave, ilginç. Oracle’da mı çalışıyordun? Doğru olarak hatırlarsam, SQL Server her zaman takma ad için türetilmiş tabloları gerekli. –

İlgili konular