我正在尝试编写以下内容,以获得不同 NumUsers 的运行总数,如下所示:
NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth])
管理工作室似乎对此不太高兴。当我删除 DISTINCT
关键字时,错误消失,但它不会是一个不同的计数。
DISTINCT
在分区函数中似乎不可能。
我如何找到不同的计数?我是否使用更传统方法,例如相关子查询?
进一步研究一下,也许这些 OVER
函数的工作方式与 Oracle 不同,因为它们不能在 SQL-Server
中用于计算运行总计。
我在 SQLfiddle 上添加了一个实例我尝试使用分区函数来计算运行总计。
最佳答案
有一个非常简单的解决方案,使用 dense_rank()
dense_rank() over (partition by [Mth] order by [UserAccountKey])
+ dense_rank() over (partition by [Mth] order by [UserAccountKey] desc)
- 1
这将准确地满足您的要求:每个月内不同 UserAccountKey 的数量。
关于sql - 可以使用 DISTINCT 进行分区函数 COUNT() OVER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11202878/