【发布时间】:2019-08-19 01:13:35
【问题描述】:
我有一个表格,每个“案例编号”都有多行。我想为每个案例编号选择一行并将其连接回另一个表,保持一对一的关系。
选择这一行的条件是:
1) 首先过滤掉每个 Case Number 的 Stage = Cancelled 的所有行
2) 如果您发现 Stage = 'In Progress' 或 'Paused',请选择该行。 (案例编号只能出现这两个中的一个)
3) 如果不是 (2),则选择 Stage = 'Completed',但选择最新的 'Stop Time'。 (这就是我认为我们可能必须使用 ROW_NUMBER() 的地方)
我已经创建了一个查询来推送行号并根据最新的“停止时间”选择一行,但我无法弄清楚如何在其中添加上述过滤器和 if-else 条件.
SELECT [Case Number],
ROW_NUMBER ( )
OVER ( PARTITION BY [Case Number] order by [Stop time] desc ) idx
,[Stage]
,[Time left]
,[SLA definition]
,[Elapsed time]
,[Elapsed percentage]
,[Start time]
,[Stop time]
,[Has breached]
,[Breach time]
,[Updated]
,[Updated by]
,[Created]
,[Created by]
FROM ( select * from [SLA_Data] where Stage != 'Cancelled' )v1
【问题讨论】:
-
您的查询距离很远,如果我们能看到一些示例数据,您的问题会更容易理解。
-
@TimBiegeleisen - 我已经发布了我能够编写的满足条件 1 的最新查询。不幸的是,我无法发布任何数据,因为这是机密数据。
-
或许可以重新考虑这个决定,因为除了完全缺乏数据之外,这似乎是一个有趣的问题。
-
你考虑过dense_rank()函数吗? ROW_NUMBER 将为找到的指定分区的每个实例提供一个增量,如果您使用 dense_rank()over(order by task order),那么您应该会看到每个 taskorder 的唯一增量条目。
-
为什么您的选择语句中缺少案例编号?
标签: sql tsql row-number