加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 在OVER的窗口函数中使用DISTINCT

发布时间:2021-03-11 14:06:54 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试将查询从Oracle迁移到SQL Server 2014. 这是我在Oracle中运行良好的查询: selectcount(distinct A) over (partition by B) / count(*) over() as A_Bfrom MyTable 这是我尝试在SQL Server 2014中运行此查询后得到的错误. Use of DISTINCT is not a

我正在尝试将查询从Oracle迁移到SQL Server 2014.

这是我在Oracle中运行良好的查询:

select
count(distinct A) over (partition by B) / count(*) over() as A_B
from MyTable

这是我尝试在SQL Server 2014中运行此查询后得到的错误.

Use of DISTINCT is not allowed with the OVER clause

谁知道问题是什么?在SQL Server中可以进行哪种查询吗?
请指教.

解决方法

Anyone know what is the problem? Is such as kind of query possible in
SQL Server?

不,目前尚未实施.请参阅以下连接项请求.

OVER clause enhancement request – DISTINCT clause for aggregate functions

另一种可能的变体是

SELECT M.A,M.B,T.A_B
FROM   MyTable M
       JOIN (SELECT CAST(COUNT(DISTINCT A) AS NUMERIC(18,8)) / SUM(COUNT(*)) OVER() AS A_B,B
             FROM   MyTable
             GROUP  BY B) T
         ON EXISTS (SELECT M.B INTERSECT SELECT T.B)

对NUMERIC的强制转换是为了避免整数除法. join子句的原因是explained here.

如果优选,它可以用ON M.B = T.B OR(M.B IS NULL和T.B IS NULL)代替(或者如果B列不可为空则简单地ON ON M.B = T.B).

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读