SQL 根据中断值计算行数
SQL Counting Rows based on break values
我经常需要在 SQL 服务器上做一些我不知道如何正确做的事情。
基本上,如果我有一个 table #sample
是这样的:
DEPARTMENT
DATE
ACCOUNTING
A
FINANCE
A
PAYROLL
A
ACCOUNTING
B
PAYROLL
A
FINANCE
A
PAYROLL
B
PAYROLL
C
我需要查询 table 以获得这样的输出:
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
帮帮我?
如上面的评论所述,ROW_NUMBER() 是 ranking functions.
集合的一部分
为了您的目的,您可以使用 DENSE_RANK():
DENSE_RANK() OVER(PARTITION BY #sample.Department ORDER BY #sample.Date)DUPECHECK
我经常需要在 SQL 服务器上做一些我不知道如何正确做的事情。
基本上,如果我有一个 table #sample
是这样的:
DEPARTMENT | DATE |
---|---|
ACCOUNTING | A |
FINANCE | A |
PAYROLL | A |
ACCOUNTING | B |
PAYROLL | A |
FINANCE | A |
PAYROLL | B |
PAYROLL | C |
我需要查询 table 以获得这样的输出:
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
帮帮我?
如上面的评论所述,ROW_NUMBER() 是 ranking functions.
集合的一部分为了您的目的,您可以使用 DENSE_RANK():
DENSE_RANK() OVER(PARTITION BY #sample.Department ORDER BY #sample.Date)DUPECHECK