sql - CASE Statement inside a subquery -
i able create following query after post below
select * duppri t exists (   select 1   duppri   symbolup = t.symbolup   , date = t.date   , price <> t.price)   order date sql check when pairs don't match
i have realized need add case statement indicate when above criteria fits, type value equal between duppri , t.duppri. occurs because of case sensitivity. query attempt clean portfolio accounting system unfortunately allowed numerous duplicates because didn't have strong referential integrity or constraints.
i case statement produce column 'ismatch'
date      |type|symbol   |symbolup |concatt      |price |ismatch 6/30/1995 |gaus|313586u72|313586u72|gaus313586u72|109.25|different 6/30/1995 |gbus|313586u72|313586u72|gbus313586u72|108.94|different 6/30/1995 |agus|srr      |srr      |agussrr      |10.25 |different 6/30/1995 |lcus|srr      |srr      |lcussrr      |0.45  |different 11/27/1996|lcus|lly      |lly      |lcuslly      |76.37 |matched 11/27/1996|lcus|lly      |lly      |lcuslly      |76    |matched 11/28/1996|lcus|lly      |lly      |lcuslly      |76.37 |matched 11/28/1996|lcus|lly      |lly      |lcuslly      |76    |matched i tried following case statement creating errors
select * duppri t exists (   select 1,   case ismatch when [type] = [t.type] 'matched' else 'different' end   duppri   symbolup = t.symbolup   , date = t.date   , price <> t.price)     order date 
you use window functions, if understand correctly:
select d.*,        (case when mint = maxt              'matched' else 'different'         end) (select d.*,               min(type) on (partition symbolup, date) mint,              max(type) on (partition symbolup, date) maxt,              min(price) on (partition symbolup, date) minp,              max(price) on (partition symbolup, date) maxp       duppri d      ) d minp <> maxp order date; 
Comments
Post a Comment