SQL - 定义一列并在同一查询中使用它

3

我可以定义一个新列并在同一查询中使用它吗?

例如,

Select 
    student, age + 10 as trueage, 
    case when trueage < 25 then 'False' else 'True' end
From 
    class

感谢您提前的帮助!


2
不可能的。你可能不理解SQL子句评估的顺序。WHERE条件首先被评估,匹配的行被返回,然后在SELECT子句之后指定的列被评估。我认为你可以在两个地方使用“age + 10”(在SELECT子句和WHERE子句中)。大多数SQL引擎会处理它。 - Konrad
你使用的是哪种关系型数据库管理系统?Netezza 显然可以实现,例如:http://stackoverflow.com/q/24246283/73226 - Martin Smith
我正在使用SQL Server。有趣的是,Microsoft Access也允许它。 - Keane Nguyen
2
@Konrad,这里有一篇好文章,展示了许多使用CROSS APPLY的方法。其中之一是“引入新列”。 - Vladimir Baranov
3个回答

4

CROSS APPLY在这里会很方便。这里有一篇不错的文章展示了它的多个用途。

Select
    student
    ,trueage
    ,case when trueage < 25 then 'False' else 'True' end
From
    class
    CROSS APPLY
    (
        SELECT age + 10 as trueage
    ) AS CA

当您拥有多层次的复杂公式时,这将非常有用,例如:

Select
    student
    ,trueage
    ,AgeFlag
From
    class
    CROSS APPLY
    (
        SELECT age + 10 as trueage
    ) AS CA1
    CROSS APPLY
    (
        SELECT case when trueage < 25 then 'False' else 'True' end AS AgeFlag
    ) AS CA2

1
如果你考虑使用子查询“同一查询”,那么是的。
select student,
       trueAge,
       case when trueAge < 25 then 'false' else 'true' end as someColumn
from ( 
    select student, age + 10 as trueAge
    from table
) thingy

还有其他的方法可以实现这个功能,这只是其中之一。


1

类似这样:

  Select student, age + 10 as trueage, 
   case when (age + 10) < 25 then 'False' else 'True' end 
   from class

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接