【发布时间】: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 一样击中我的耳朵),但它仍然非常有帮助。我已将其包含在我对已接受答案的编辑中。
标签: sql sql-server tsql