この問題については以前に説明しましたが、内側の選択と外側の選択で異なるwhere句を扱っているため、特定の問題に対処する回答はありません。このクエリはSybaseで正常に実行されましたが、SQL Serverで実行されると、この投稿のタイトルにエラーが表示されます。クエリは複雑ですが、クエリの一般的な概要は次のとおりです。
select sum ( t.graduates -
( select sum ( t1.graduates )
from table as t1
where t1.id = t.id and t1.group_code not in ('total', 'others' ) ) )
from table as t
where t.group_code = 'total'
以下は、私が解決しようとしている状況を説明しています。
派生テーブルまたは結合を使用してこれを書き換えて同じ結果を得る方法はありますか?
更新:作成しました サンプルデータと特定の問題に対する3つのソリューション (2つはsgeddesの影響を受けています)。追加したのは、相関サブクエリをFROM句の派生テーブルに移動することです。助けてくれてありがとう!
1つのオプションは、サブクエリをLEFT JOIN
:
select sum ( t.graduates ) - t1.summedGraduates
from table as t
left join
(
select sum ( graduates ) summedGraduates, id
from table
where group_code not in ('total', 'others' )
group by id
) t1 on t.id = t1.id
where t.group_code = 'total'
group by t1.summedGraduates
おそらく、より良いオプションは、SUM
をCASE
とともに使用することです。
select sum(case when group_code = 'total' then graduates end) -
sum(case when group_code not in ('total','others') then graduates end)
from yourtable