【发布时间】:2016-03-13 20:49:45
【问题描述】:
我有一个按月列出的员工存在数据列表(Exist='T',Not Exist ='F'),数据如下所示。
DepNo Empno Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
---------------------------------------------------------------
1234 100 T T T T T T T F F F F F
1234 101 T T T T F F F F F F F F
1234 102 F F F F T T T T T T T T
1234 103 F F F F T T T F F F F F
---------------------------------------------------------------
我想获取每位员工的开始和结束日期。例如,员工 100 的开始日期是 2015 年 1 月 1 日(因为他存在于 1 月),结束日期是 2015 年 7 月 31 日(因为员工在 8 月被终止
---------------------------------------------------------------------------------
DepNo Empno Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec StartDt EndDt
----------------------------------------------------------------------------------
1234 100 T T T T T T T F F F F F 1-Jan-15 31-Jul-15
1234 101 T T T T F F F F F F F F 1-Jan-15 30-Apr-15
1234 102 F F F F T T T T T T T T 1-May-15 31-Dec-15
1234 103 F F F F T T T F F F F F 1-May-15 31-Jul-15
----------------------------------------------------------------------------------
我正在使用 Oracle 11g。有人可以帮我实现这一目标吗?
【问题讨论】:
-
Nivas,选择....案例不起作用。因为使用 select....case 1st-row 返回 enddt 为 2015 年 11 月 30 日,但我需要 2015 年 7 月 31 日。如果我看起来有问题,请纠正我
-
您可以将单个 SQL 与 select case 一起使用,但这会变得过于复杂。如果您可以使用 PL/SQL,我建议您这样做。如果我能得到一个不错的答案,我会尝试编写 SQL 并将其发布为答案。
-
您还必须更清楚您的假设。您可以让同一员工在
T和F之间来回多次吗?员工可以只有Fs 吗?遇到这种情况怎么办?是否假定月份为年份2015? -
如果你能发布你到目前为止所尝试的内容,我也很高兴。包括您尝试使用
select ... case。