我有一张工作项上发生的“动作”表。我最初是使用 Row Number 和 Partition By 在表中按顺序计算每个动作,如下所示,它工作得很好。
当前表
+---------------+--------------------+-----------+-----------+--------------+
| Work Item Ref | Work Item DateTime | Auditable | Action ID | Action Count |
+---------------+--------------------+-----------+-----------+--------------+
| 2500 | 19/05/2023 10:01 | Yes | 20 | 1 |
| 2501 | 19/05/2023 10:02 | Yes | 11 | 1 |
| 2501 | 19/05/2023 10:03 | Yes | 9 | 2 |
| 2501 | 19/05/2023 10:04 | No | 19 | 3 |
| 2501 | 19/05/2023 10:06 | Yes | 5 | 4 |
| 2502 | 19/05/2023 10:04 | No | 2 | 1 |
| 2502 | 19/05/2023 10:05 | Yes | 4 | 2 |
+---------------+--------------------+-----------+-----------+--------------+
代码
ROW_NUMBER() OVER(PARTITION BY [Work Item Ref] ORDER BY [Work Item DateTime] asc) AS [Action Count]
但是现在,我们需要相同的计数,但仅在“可审计”列显示为“是”的情况下。我尝试在
PARTITION BY
和 ORDER BY
之间添加一个 WHERE 子句,但意识到这不是正确的语法。当满足标准时,我需要它基本上only顺序计数。我怎样才能实现下面的例子?
想要的结果
+---------------+--------------------+-----------+-----------+--------------+
| Work Item Ref | Work Item DateTime | Auditable | Action ID | Action Count |
+---------------+--------------------+-----------+-----------+--------------+
| 2500 | 19/05/2023 10:01 | Yes | 20 | 1 |
| 2501 | 19/05/2023 10:02 | Yes | 11 | 1 |
| 2501 | 19/05/2023 10:03 | Yes | 9 | 2 |
| 2501 | 19/05/2023 10:04 | No | 19 | |
| 2501 | 19/05/2023 10:06 | Yes | 5 | 3 |
| 2502 | 19/05/2023 10:04 | No | 2 | |
| 2502 | 19/05/2023 10:05 | Yes | 4 | 1 |
+---------------+--------------------+-----------+-----------+--------------+
您可以将
row_number()
划分为附加列,并将其包装在 case
表达式中:
CASE WHEN auditable = 'Yes' THEN
ROW_NUMBER() OVER(
PARTITION BY [Work Item Ref], [Auditable]
ORDER BY [Work Item DateTime]
)
END AS [Action Count]