【问题标题】:Using alias in the same select在同一个选择中使用别名
【发布时间】:2013-05-12 18:58:28
【问题描述】:

一旦我设置了一个像SUM(someColumn) AS [ColumnName] 这样的列名,之后我该如何使用它?

假设我构建了一个这样的查询:

SELECT SUM(foo.A + foo.B + foo.C + foo.D + foo.E) AS [TotalFoo],
       SUM(bar.A + bar.B + bar.C + bar.D + bar.E) AS [TotalBar],
       -- I need [TotalFooBar]

在同一个选择中,我想要[TotalFoo][TotalBar] 的总数。是否可以参考这些专栏?我可以做到这一点:

SELECT SUM(foo.A + foo.B + foo.C + foo.D + foo.E) AS [TotalFoo],
       SUM(bar.A + bar.B + bar.C + bar.D + bar.E) AS [TotalBar],
       SUM((foo.A + foo.B + foo.C + foo.D + foo.E) +
           (bar.A + bar.B + bar.C + bar.D + bar.E)) AS [TotalFooBar]

在这个例子中没问题,但我有 更多 列,很难理解。然后如果我必须使用这个列([TotalFooBar])怎么办?我每次都必须重写整个 SUM 吗?
我正在寻找的是这样的:

SELECT SUM(foo.A + foo.B + foo.C + foo.D + foo.E) AS [TotalFoo],
       SUM(bar.A + bar.B + bar.C + bar.D + bar.E) AS [TotalBar],
       SUM([TotalFoo] + [TotalBar]) AS [TotalFooBar]

这甚至可能吗?

【问题讨论】:

    标签: sql-server-2008 select alias columnname


    【解决方案1】:

    ,您不能在同一个SELECT 语句中执行此操作,但您可以使用子查询:

    SELECT 
      TotalFoo,
      TotalBar,
      TotalFoo + TotalBar AS TotalFooBar
    FROM
    (
        SELECT SUM(foo.A + foo.B + foo.C + foo.D + foo.E) AS [TotalFoo],
               SUM(bar.A + bar.B + bar.C + bar.D + bar.E) AS [TotalBar],
               ...
        FROM ...
    ) AS sub
    ...
    

    或 CTE:

    WITH CTE
    AS
    (
       SELECT SUM(foo.A + foo.B + foo.C + foo.D + foo.E) AS [TotalFoo],
              SUM(bar.A + bar.B + bar.C + bar.D + bar.E) AS [TotalBar],
              ...
       FROM ...
    )
    SELECT 
      TotalFoo,
      TotalBar,
      TotalFoo + TotalBar AS TotalFooBar
    FROM CTE
    

    【讨论】:

    • 哇哦,我喜欢它!当你看到它完成时,它是如此明显......谢谢
    • 不允许这样做是否有技术原因?
    • @AaronFranke 是的,这是为了防止歧义。别名可能与现有列名相同 - 没有什么能阻止这种情况的发生
    猜你喜欢
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多