[英]How to use one data field into another case expression in the same query
I want to use SNumber
in the second part of CASE
expression but not sure how to use it?我想在CASE
表达式的第二部分使用SNumber
但不知道如何使用它?
select
PE.EDateTime,
(case when(PE.EDateTime is not NULL and cast(PE.EDateTime as time) < '12:30') then cast(format(PE.EDateTime,'yyyyMMddhhmm') as varchar(50))+'AM'
when (PE.ADate is not NULL and cast(PE.ADate as time) < '12:30') then cast(format(PE.ADate,'yyyyMMddhhmm') as varchar(50))+'AM'
when (PE.EDateTime is not NULL and cast(PE.EDateTime as time) >= '12:30') THEN cast(format(PE.EDateTime,'yyyyMMddhhmm') as varchar(50))+'PM'
when (PE.ADate is not NULL and cast(PE.ADate as time) > '12:30') then cast(format(PE.ADate,'yyyyMMddhhmm') as varchar(50))+'PM'
else null
end) as SNumber,
case
when (SNumber like'%AM') then 'AM'
when SNumber like '%PM') then 'PM'
else null
end as [Session],
Comments
from (
select
PE1.RId,
PE1.ADate,
PE1.EDateTime
from (
select
RegEId,
ADate,
EDateTime,
Comments
from PatEnr
where PreNumber is not null
) as PE1
left join Pat PEA
on PE1.RegEId = PEA.RegEId
left join PBooking PB
on PB.RegEId = PE1.RegEId
) as PE
I want to use SNumber
here below in the same query but I am not able to use this as this all belongs to one query.我想在下面的同一查询中使用SNumber
,但我无法使用它,因为这都属于一个查询。 Is there any way to use the above in below CASE
?有没有办法在下面的CASE
中使用上述内容? I want to use something like below.我想使用类似下面的东西。
case
when (SNumber like'%AM') then 'AM'
when (SNumber like '%%PM') then 'PM'
else null
end as Session,
Use cross apply to perform your calculation which you can then reuse.使用交叉应用来执行您的计算,然后您可以重复使用。
select
SNumber
, case when SNumber like '%AM%' then 'AM'
when SNumber like '%PM%' then 'PM'
else null end as [Session]
from MyTable PE
cross apply (
values (
case when(PE.EDateTime is not NULL and cast(PE.EDateTime as time) < '12:30') then cast(format(PE.EDateTime,'yyyyMMddhhmm') as varchar(50))+'AM'
when (PE.ADate is not NULL and cast(PE.ADate as time) < '12:30') then cast(format(PE.ADate,'yyyyMMddhhmm') as varchar(50))+'AM'
when (PE.EDateTime is not NULL and cast(PE.EDateTime as time) >= '12:30') THEN cast(format(PE.EDateTime,'yyyyMMddhhmm') as varchar(50))+'PM'
when (PE.ADate is not NULL and cast(PE.ADate as time) > '12:30') then cast(format(PE.ADate,'yyyyMMddhhmm') as varchar(50))+'PM'
else null
end
)) x (SNumber)
Note: contains
doesn't work in that context - its a where
clause predicate for full-text search, so I've replaced with like
.注意: contains
在该上下文中不起作用 - 它是全文搜索的where
子句谓词,因此我已替换为like
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.