1

複数のテーブルで特定の条件のレコード数を返す必要があります

select count(*) c from table1
where exists (select * from crosstable where crosstable.refid = table1.id)
and crosstable.year = 2014
union
select count(*) c from table2
where exists (select * from crosstable where crosstable.refid = table2.id)
and crosstable.year = 2014
union
select count(*) c from table3
where exists (select * from crosstable where crosstable.refid = table3.id)
and crosstable.year = 2014

これにより、テーブルから一意の整数値の結果セットが返されます。

したがって、table1 が '1' を返し、table2 が table3 が '5' を返す場合、'1'、'5'、'5' の代わりに '1'、'5' を取得します。

また、実行するのにうまくいかないようです

select sum(c) from (previous query))

sysdummy テーブルを使用してみましたが、構文の quiet がうまくいかず、この問題の良い例が見つかりません。私はそれを完全に間違って処理している可能性があります..

最後に、結果を 1 つの数値にする必要があります。これは、ユニオン パーツ内の各サブクエリの数です。

4

2 に答える 2

0

以下をお試しください

with temp as (
    select count(*) c from table1
    where exists (select * from crosstable where crosstable.refid = table1.id)
    and crosstable.year = 2014
    union all
    select count(*) c from table2
    where exists (select * from crosstable where crosstable.refid = table2.id)
    and crosstable.year = 2014
    union all
    select count(*) c from table3
    where exists (select * from crosstable where crosstable.refid = table3.id)
    and crosstable.year = 2014
)
select sum(c) as final_count from temp;
于 2015-09-07T13:33:19.237 に答える