基于中断值的 SQL 计数行

Posted

技术标签:

【中文标题】基于中断值的 SQL 计数行【英文标题】:SQL Counting Rows based on break values 【发布时间】:2021-12-31 13:37:49 【问题描述】:

我经常需要在 SQL Server 中做一些我不知道如何正确做的事情。

基本上,如果我有一个像这样的表#sample

DEPARTMENT DATE
ACCOUNTING A
FINANCE A
PAYROLL A
ACCOUNTING B
PAYROLL A
FINANCE A
PAYROLL B
PAYROLL C

我需要查询该表以获得如下输出:

DEPARTMENT DATE DUPECHECK
ACCOUNTING A 1
ACCOUNTING B 2
FINANCE A 1
FINANCE A 1
PAYROLL A 1
PAYROLL A 1
PAYROLL B 2
PAYROLL C 3

在我以前的工作中,在 Oracle Hyperion Brio 中,我曾经为每一行创建一个值为 1 的列,并在该列上编写一个函数 Cume,其中包含我需要计算的列的中断值。

在 Excel 中,我可以创建一个包含中断值的连接列,然后通过 countif(concat:concat,concat1) 复制该公式。

我觉得应该和这个差不多,但根本不是这样:

ROW_NUMBER() OVER (PARTITION BY #sample.Department ORDER BY #sample.Date) DUPECHECK

帮帮我?

【问题讨论】:

用dense_rank()替换row_niumber()? 我想现在是阅读documentation about ranking functions 以了解其他可用信息的好时机。 @SMor 谢谢。这很有帮助。本来可以更好一点(像我应该得到的 RTFM 一样击中我的耳朵),但它仍然非常有帮助。我已将其包含在我对已接受答案的编辑中。 【参考方案1】:

如上面的 cmets 中所述,ROW_NUMBER() 是 ranking functions 集合的一部分。

为了您的目的,您可以使用DENSE_RANK():

DENSE_RANK() OVER(PARTITION BY #sample.Department ORDER BY #sample.Date)DUPECHECK

【讨论】:

以上是关于基于中断值的 SQL 计数行的主要内容,如果未能解决你的问题,请参考以下文章

基于匹配值的雪花SQL计数和从另一个表求和

sql如何选择行=值的多行计数

DB2 SQL 比 SUM+CASE 更好的方法来获取基于 ID 的唯一值计数

SQL Server 更新语句基于具有多个值的 Select 语句

Pyspark 基于其他列和运行计数器添加列

基于第二个参数的不同值的计数