0

我的解决方案中使用了一个案例语句,它没有按预期工作。任何人都可以纠正它吗?

我有一个下面给定的表格

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”。以下是标记它的条件。

  1. 如果旅行是在带薪差距之后,则应标记为“Y”
  2. 如果旅行是在带薪差距之前,则应标记为“Y”

  3. 如果旅行是在预定的工作之后。即一项工作(计划)活动,然后是有偿间隙(Y/N),然后是旅行活动,该旅行应标记为“Y”

  4. 如果旅行在任何预定工作之前,即旅行然后有偿间隙(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

谁能建议我解决这个问题的方法?

提前致谢

4

1 回答 1

0

weekdate我认为..您的案例陈述中也应该对列有条件。

检查你的表应该有至少一行的activity值是“GAP”或“W-100001”,= ispaidgap“Y”以及“ 19:15”或“18:44 ”starttimeendtime

于 2013-09-25T10:52:18.850 回答