在 flag = 'Y' 的表中读取多行的逻辑
Posted
技术标签:
【中文标题】在 flag = \'Y\' 的表中读取多行的逻辑【英文标题】:Logic to read multiple rows in a table where flag = 'Y'在 flag = 'Y' 的表中读取多行的逻辑 【发布时间】:2021-09-15 23:31:40 【问题描述】:考虑以下场景。我有一个 Customer 表,其中包含 RowStart 和 EndDate 逻辑,因此每次更新字段值时都会写入一个新行。
此表中的相关字段为:
RowStartDate
RowEndDate
CustomerNumber
EmployeeFlag
为此,我想编写一个查询,它将返回员工的任期(EmploymentStartDate
和 EmploymentEndDate
)。 IE。 RowStartDate
当EmployeeFlag
第一次变成'Y',然后第一个RowStartDate
其中EmployeeFlag
变成'N'(当然,按RowStartDate asc 排序)。还有一个额外的复杂性是,一个人的标志值可能会在 Y 和 N 之间多次变化,因为他们可能会成为员工、辞职,然后在以后再次被雇用。
Example table structure is:
| CustomerNo | StaffFlag | RowStartDate | RowEndDate |
| ---------- | --------- | ------------ | ---------- |
| 12 | N | 2019-01-01 | 2019-01-14 |
| 12 | N | 2019-01-14 | 2019-03-02 |
| 12 | Y | 2019-03-02 | 2019-10-12 |
| 01 | Y | 2020-03-13 | NULL |
| 12 | N | 2019-10-12 | 2020-01-01 |
| 12 | Y | 2020-01-01 | NULL |
输出可能类似于
| CustomerNo | StaffStartDate | StaffEndDate |
| ---------- | -------------- | ------------ |
| 12 | 2019-03-02 | 2019-10-12 |
| 01 | 2020-03-13 | NULL |
| 12 | 2021-01-01 | NULL |
任何关于我如何解决这个问题的想法都将不胜感激。
【问题讨论】:
样本数据和所需的输出会有所帮助。 根据问题指南,请展示您尝试过的内容并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。我们需要一个minimal reproducible example,其中包含示例数据和所需结果(格式化文本不是图像。 尝试添加表格以显示输出和表格结构,格式似乎不起作用SELECT <fields> FROM YourTable WHERE StaffFlag = 'Y'
?
从您的示例中,带有N
标志的行似乎完全不相关,所以只需select * from table where staffflag = 'Y'
如果这不能满足您的要求,您需要一个更好的示例来说明实际问题。
【参考方案1】:
确保按 ID 和日期对列进行排序:
select *
from yourtable
order by CustomerNumber asc,
EmployeeFlag desc,
RowStartDate asc,
RowEndDate asc
这会为您提供每位员工随时间发生的所有变化的列表。
随后,您希望将两行映射为具有两列的单行(将两个日期映射为总体开始日期和结束日期)。其他人使用lead()
函数完成了此操作。详情请看这里:Merging every two rows of data in a column in SQL Server
【讨论】:
以上是关于在 flag = 'Y' 的表中读取多行的逻辑的主要内容,如果未能解决你的问题,请参考以下文章