2012-11-06 13 views
10

。Iこれらを合計する。SELECT SUM()()(SELECT(SELECT FROM)

を上記の行「スクリプト」を呼び出すと、私は、しかし、それは。私は「不適切な構文を近くに取得保持しません、私はこれが動作するようになっselect count(*) from selectを読む次のセットアップ

SELECT SUM(numbers) 
FROM (
      script 
     ) 

を試してみました。 "

重要であるかどうかわかりませんが、ここではcolumnAという名前がついていますが、それ自体がSELECTステートメントで作成されています。

+1

あなたが「スクリプト」という用語を誤用しているようです。あなたが使用している* exact *クエリと、それがあなたに与える* exact *エラーを投稿できますか? – ruakh

答えて

17

あなたは、サブクエリの別名が必要になります。

SELECT SUM(numbers) 
FROM  
(
    script -- your subquery will go here 
) src -- place an alias here 

だからあなたの完全なクエリは次のようになります。

select sum(numbers) 
from 
(
    SELECT columnA AS numbers 
    FROM tableA 
    WHERE clause 
) src 
+0

ところで、これはtSQLの問題です。サブクエリに別名を付けるかどうかは関係ありません。 MySQLなどについてはわかりませんが、tSQLはすべてのサブクエリに別名を必要とします。 – Bill

+2

@Bill:オラクルは間違ってそれをしています。物事を正しく実装することは問題ではありません。 –

+0

@Bill私の好みは、必要であるかどうかにかかわらず、すべてのサブクエリのエイリアスです。これは、データがどこから来ているのかをはっきりさせます。 – Taryn

5

あなたが望むものを達成するために全く問題は絶対にありません。あなたのエンティティクエリは表示されませんが、最も一般的な問題は、ネストされたselectステートメントにエイリアスを追加することを忘れてしまうことです。完璧に動作し、このサンプルを見てみましょう:OPによると

select sum(col1) as sum1 
from (select col1 
     from (select 1 col1 union all select 2 union all select 3) tmp 
    ) tmp2 

を、ここにあなたの最後のクエリは次のとおりです。

SELECT SUM(numbers) 
FROM (
      SELECT columnA 
        AS 
        'numbers' 
       FROM tableA 
      WHERE clause 
     ) tmp