我创建了一个临时表并插入了如下所示的值。
create table #temp( val int );
insert into #temp values(333);
insert into #temp values(222);
insert into #temp values(111);
Run Code Online (Sandbox Code Playgroud)
在查询下面的 select 语句时,我得到了 333 作为答案。
Select *
from #temp a
Where 1 =(
Select COUNT(VAL)
from #temp b
where a.val <= b.val
);
Run Code Online (Sandbox Code Playgroud)
结果:
val
333
Run Code Online (Sandbox Code Playgroud)
您能否帮助我了解 SQL Server 是如何使用此解决方案的。
以这种方式重写您的查询:
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
Run Code Online (Sandbox Code Playgroud)
如果您取消注释 where 子句,您将得到333 | 1结果。您从外部表中请求没有重复或更大值的行。