2011-06-27 4 views
0

私は私の頭を叩いている少し不思議なクエリを持っています。少し難しいのは、組み込み製品の制限された環境で動作しなくてはならないということです。ここでは、結合後にのみクエリを変更できます。SQL Embedded Select With SUM、わずかに制限されています

完全な行を作るために2つのテーブルを結合しています。各行にはモジュールIDと加工されていない列があり、未加工の場合は0、作業の場合は1です。すべての行にはモジュールIDを参照するクォータ列もあり、同じモジュールIDを持つすべての行は同じクォータ値を持ちます。

は、したがって、たとえばデータは、私はモジュールのための完全な列の合計は、そのモジュールのクォータ未満であるレコードを選択したい

ID |Module | Quota | Complete 
------------------------- 
1 |A  | 1  | 0 
2 |B  | 2  | 1 
3 |A  | 1  | 0 
4 |A  | 1  | 0 
5 |B  | 2  | 1 
6 |C  | 4  | 0 

です。私が持っている

は次のとおりです。私は唯一のhaving句の後に何も影響を与えることができるように、私が埋め込まれた声明の中で、元のクエリの行からモジュールの値を参照する方法がわからない

Select table_a.quota, table_a.module, table_b.complete 
from table_a inner join table_b on table_a.id = table_b.id 
having table_a.quota > (select sum(table_b.complete) from table_a inner join table_b on table_a.id = table_b.id where table_a.module = *module*) 

モジュール)、任意のアイデア?

事前にお手伝いいただける方に感謝します!

答えて

0

最初の注記は、HAVINGではなくWHEREを使用したいと思います。あなたはGROUP BYを持っていません。

  • すべての結合が完了した後、集約が完了する前に適用されます。
  • 凝集は、凝集した後に適用される。外側のクエリを参照するという点で

、相関サブクエリ内で、あなたは別名を使用する必要があります...

SELECT 
    table_a.quota, 
    table_a.module, 
    table_b.complete 
FROM 
    table_a 
INNER JOIN 
    table_b 
    ON table_a.id = table_b.id 
WHERE 
    table_a.quota 
    > 
    (
    SELECT 
     SUM(lookup_b.complete) 
    FROM 
     table_a AS lookup_a 
    INNER JOIN 
     table_b AS lookup_b 
     ON lookup_a.id = lookup_b.id 
    WHERE 
     lookup_a.module = table_a.module 
) 
+0

や仕事は、Sybaseの奇妙な癖の一つの両方を有します。これは私が試みてきたこととほとんど同じですが、私はテーブルに変更や表示ができないクエリの隠れたビットにエイリアスが与えられていて、そのエイリアスが何であるかわからないはずです – HeHasMoments

+0

同じテーブルへの2つの参照が同じスコープ内で別々のエイリアスを持つようにする必要があります。名前を変更する必要はありません。エイリアスを与えるだけで、どちらのテーブルを参照する場合でもあいまいさはありません。 – MatBailie

関連する問題