为了回答分区上不同的 SQL 计数, Erik Darling 发布了此代码以解决以下问题COUNT(DISTINCT) OVER ()
:
SELECT *
FROM #MyTable AS mt
CROSS APPLY ( SELECT COUNT(DISTINCT mt2.Col_B) AS dc
FROM #MyTable AS mt2
WHERE mt2.Col_A = mt.Col_A
-- GROUP BY mt2.Col_A
) AS ca;
Run Code Online (Sandbox Code Playgroud)
查询使用CROSS APPLY
(not OUTER APPLY
) 那么为什么在执行计划中有外连接而不是内连接?
另外,为什么取消注释 group by 子句会导致内部联接?
我不认为数据很重要,而是从 kevinwhat 在另一个问题上提供的数据中复制:
create table #MyTable (
Col_A varchar(5),
Col_B int
)
insert into #MyTable values ('A',1)
insert into #MyTable values ('A',1)
insert into …
Run Code Online (Sandbox Code Playgroud)