sql-server – 在OVER的窗口函数中使用DISTINCT
发布时间:2021-03-10 17:49:27 所属栏目: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中可以进行哪种查询吗? 解决方法
不,目前尚未实施.请参阅以下连接项请求. 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). (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读