如何在同一查询中的查询中使用已创建的列?

时间:2012-03-01 20:31:16

标签: sql postgresql view

我说我做了

CASE WHEN apples.fruits = 'Macintosh' THEN 'Green' END AS FruitBasket

我现在如何使用水果篮进行更改?在这个非常查询中?

我想说

CASE WHEN FruitBasket = 'Green' THEN 'Awesome' END AS IsItGood

请记住,我希望这两行代码能够在同一个查询中运行。

2 个答案:

答案 0 :(得分:1)

不能将第一个查询插入临时表,然后更新该临时表吗?

Select into #temp CASE WHEN apples.fruits = 'Macintosh' THEN 'Green' END AS FruitBasket,    othercolumn1,othercolumn2 

select CASE WHEN FruitBasket = 'Green' THEN 'Awesome' END AS IsItGood from #temp

答案 1 :(得分:0)

最佳方法是表格方法。

 CREATE FUNCTION fruit_basket(apples) RETURNS text LANGUAGE SQL AS $$
    CASE WHEN $1.fruits = 'Macintosh' THEN 'Green' END; $$;

然后你可以像列一​​样使用它,除非你必须限定它,因为支持class.method语法。

 SELECT CASE WHEN a.fruit_basket = 'Green' THEN 'Awesome' end as is_it_good
   FROM apples a;

注意这会将a.fruit_basket变成fruit_basket(a),所以你不能省略a。在fruit_basket之前。

请注意,这将表现良好,因为它对表中的元组进行操作,并且不会直接命中表。它可以由规划器作为SQL宏内联。