我的解决方案中使用了一个案例语句,它没有按预期工作。任何人都可以纠正它吗?
我有一个下面给定的表格
create table data_cte
(
weekdate datetime,
activity varchar(10),
starttime varchar(5),
endtime varchar(5),
duration numeric(6,2),
ishomeoroffice varchar(1),
ispaidgap varchar(1),
isScheduled varchar(1)
)
其中的数据如下。
weekdate || activity || starttime || endtime || duration || ishomeoroff || ispaidgap || isscheduled
2013-09-09 00:00:00.000 || W-100001 || 08:00 || 11:00 || 3 || H || N || Y
2013-09-09 00:00:00.000 || GAP || 11:00 || 12:00 || 1 || G || Y || Y
2013-09-09 00:00:00.000 || T-100002 || 12:00 || 13:00 || 1 || H || N || NULL
2013-09-09 00:00:00.000 || W-100001 || 13:00 || 15:00 || 2 || O || N || NULL
2013-09-09 00:00:00.000 || W-100001 || 15:00 || 18:00 || 3 || O || N || NULL
2013-09-09 00:00:00.000 || T-100002 || 18:00 || 18:45 || 0.75 || O || N || NULL
2013-09-09 00:00:00.000 || GAP || 18:45 || 19:15 || 0.5 || G || N || NULL
2013-09-09 00:00:00.000 || W-100001 || 19:15 || 22:15 || 3 || H || N || N
2013-09-10 00:00:00.000 || W-100001 || 8:15 || 11:15 || 3 || H || N || Y
2013-09-10 00:00:00.000 || GAP || 11:15 || 12:15 || 1 || G || Y || Y
2013-09-10 00:00:00.000 || T-100002 || 12:15 || 13:15 || 1 || H || N || NULL
2013-09-10 00:00:00.000 || W-100001 || 13:15 || 18:00 || 4.75 || O || N || NULL
2013-09-10 00:00:00.000 || T-100002 || 18:00 || 18:45 || 0.75 || O || N || NULL
2013-09-10 00:00:00.000 || GAP || 18:45 || 19:30 || 0.75 || G || Y || NULL
2013-09-10 00:00:00.000 || W-100001 || 19:30 || 21:30 || 2 || H || N || Y
我需要多一列来将必须支付的旅行标记为“Y”。以下是标记它的条件。
- 如果旅行是在带薪差距之后,则应标记为“Y”
如果旅行是在带薪差距之前,则应标记为“Y”
如果旅行是在预定的工作之后。即一项工作(计划)活动,然后是有偿间隙(Y/N),然后是旅行活动,该旅行应标记为“Y”
- 如果旅行在任何预定工作之前,即旅行然后有偿间隙(Y/N)然后工作(计划),则该旅行应标记为“Y”
更简单地说,如果旅行是为了某个目的而发生的,即为了任何预定的工作,那么旅行必须标记为“Y”,否则标记为“N”。
我已经尝试过以下一种。但是,它的 Travel(9th sep , 18:45-19:15 ) 标记为“Y”实际上是错误的,因为没有安排旅行的目的(意味着没有安排后续工作)
select weekdate,activity,starttime,endtime,duration,ishomeoroffice,ispaidgap,
(case when activity='T-100002' then
(case
when exists(select 1 from data_cte cd1 where T3.weekdate=cd1.weekdate and T3.endtime=cd1.starttime and cd1.activity='GAP' and cd1.ispaidgap='Y') then 'Y'
when exists(select 1 from data_cte cd2 where T3.weekdate=cd2.weekdate and T3.endtime=cd2.starttime and cd2.activity='W-100001'and cd2.isscheduled='Y') then 'Y'
when exists(select 1 from data_cte cd3 where T3.weekdate=cd3.weekdate and T3.starttime=cd3.endtime and cd3.activity='GAP' and cd3.ispaidgap='Y')then 'Y'
when exists(select 1 from data_cte cd4 where T3.weekdate=cd4.weekdate and T3.starttime=cd4.endtime and cd4.activity='W-100001'and cd4.isscheduled='Y') then 'Y'
else 'N' end)
end)
isTravel,
isScheduled from data_cte T3 ORDER BY weekdate,starttime
谁能建议我解决这个问题的方法?
提前致谢