一時テーブルを作成し、以下のように値を挿入しました。
create table #temp( val int );
insert into #temp values(333);
insert into #temp values(222);
insert into #temp values(111);
以下のselectステートメントをクエリすると、答えは333でした。
Select *
from #temp a
Where 1 =(
Select COUNT(VAL)
from #temp b
where a.val <= b.val
);
結果:
val
333
SQLサーバーがどのようにしてこのソリューションを実現したかを教えてください。
クエリを次のように書き換えます。
SELECT a.*, x.cnt
FROM #temp a
CROSS APPLY (
SELECT COUNT(VAL) AS cnt
FROM #temp b
WHERE a.val <= b.val
) x
--WHERE x.cnt = 1
Where句のコメントを外すと、333 | 1
結果として。重複またはより大きな値を持たない外部テーブルの行をリクエストします。