i trying add computed column table. have following case statement building calculated column in select statement,
--but want use column determine subsequent columns (sooo.. adding computed column workaround avoid complex cte i'm not sure can figure out - let me know if cte or functions better way go)
--- want case statement computed column in table itself
select top 1000 l.[msgdate] ,c.[alarmtype] ,l.[type] ,l.[usrstr1] ,l.[usrstr4] ,l.[usrstr5] ,l.[usrstr12] ,l.[usrstr15] ,case when exists ( select * breinigsville.dbo.scada_sr s s.scada_sr_tag = l.usrstr15 , ((l.[usrstr4]='analog' , c.[alarmtype] '%hh%') or (l.[usrstr4]='status')) ) 1 else 0 end [safety] [breinigsville].[dbo].[lmfw] l full outer join [breinigsville].[dbo].[_acknowledgedalarms] c on l.seqno=c.seqno2 ( l.[type]='ack' , l.usrstr12 '%ccxos%' , l.usrstr12 not '%ccxos5' , l.usrstr12 not '%ccxos6' , l.usrstr12 not '%ccxos9' , l.usrstr12 not '%ccxos12' , l.msgdate>getdate()-1 ) order l.seqno desc
use outer apply:
from [breinigsville].[dbo].[lmfw] l full outer join [breinigsville].[dbo].[_acknowledgedalarms] c on l.seqno = c.seqno2 outer apply (select (case when count(*) > 0 1 else 0 end) safety breinigsville.dbo.scada_sr s s.scada_sr_tag = l.usrstr15 , ((l.[usrstr4] = 'analog' , c.[alarmtype] '%hh%') or (l.[usrstr4] = 'status') ) ) vals then can use vals.safety anywhere in query.
note: version uses count(*). if performance @ concern, can want using additional subquery. answered way, because structure of query seems easier follow.
incidentally, cannot put subquery in computed column. can it, requires creating user-defined function, , using computed column. outer apply simpler, , can put logic table-valued function or view.
Comments
Post a Comment