2011-08-19 15 views
7

Böyle bir şey yapmak istiyorum:SELECT yan tümcesinde bir takma ad kullanırsam, bu takma adıma nasıl başvurabilirim?

SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, Foo - col_c as Bar 
FROM my_table 
WHERE...; 

Ancak, ben Foo bilinmemektedir söyleyerek bir hata alıyorum. Foo birtakım diğer sütunlardaki bazı hesaplamalardan elde edildiğinden, Bar için tekrar formülü tekrarlamak istemiyorum. Herhangi bir iş var mı?

+0

Hangi db kullanıyorsunuz? – beny23

+0

Vertica kullanıyorum, ancak aynı hatayı da MySQL ile elde ediyorum. –

cevap

8
SELECT Foo, Foo - col_c as Bar 
from (
SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, col_c 
FROM my_table 
WHERE... 

) t; 
+2

+1: Hallainzil'in cevabı ile aynı, ama hatasız :) – MatBailie

3

Ben genellikle bir alt sorgu ile bu işi olacaktır:

SQL Server var ise
SELECT Foo, Foo - col_c as Bar 
FROM (
    SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, col_c 
    FROM my_table 
    WHERE ... 
) 
WHERE ... 

, bir CTE hemen aynı şeyi başarır.

+0

Aynı sorun alt sorgu ile ortaya çıkar. Muhtemelen kastettiğin şey "Foo - col_c Bar" biti dış sorguya taşımaktı. Yine de, bir alt sorgunun bu bağlamda en uygun olup olmayacağından emin değilim. –

+0

Doğru. @codie: Bu benzer soruya bir açıklama için bakın: http://stackoverflow.com/questions/6545664/using-case-expression-column-in-where-clause/6545685#6545685 –

+0

@codie: Ya alt sorgu çözümünü kullanıyorsunuz veya kodu "WHERE" maddesinde tekrarlarsınız. –

İlgili konular