5

このように列名を設定したら、 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]

それは可能ですか?

4

1 に答える 1

10

いいえ、同じ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
于 2013-05-17T14:49:40.977 に答える