Paste this into a new question or an answer at dba.stackexchange.com:
<!-- --> > create table your_table (SDO int,Startmonth varchar(3),endmonth varchar(3), rate int); > GO > > <pre> > ✓ > </pre> <!-- --> > insert into your_table > values > (101,'jan','mar',10), > (101,'feb','mar',20), > (101,'may','jul',30); > GO > > <pre> 3 rows affected > </pre> <!-- --> > Select * > from > ( > select > case when tab2.SDO is null then tab1.SDO else tab2.SDO end as SDO, > case when tab2.Startmonth is null then tab1.Startmonth else tab2.Startmonth end as Startmonth, > case when tab2.endmonth is null then tab1.endmonth else tab2.endmonth end as endmonth, > case when tab2.rate is null then tab1.rate else tab2.rate end as rate > from your_table tab1 > left join your_table tab2 > on (tab2.Startmonth > tab1.Startmonth > and tab2.Startmonth < tab1.endmonth ) or > tab2.Startmonth is null > ) as tab > group by SDO,Startmonth,endmonth,rate > having count(*) = 1 > GO > > <pre> > SDO | Startmonth | endmonth | rate > --: | :--------- | :------- | ---: > 101 | may | jul | 30 > </pre> *db<>fiddle [here](https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=b7db8165867b33a557ad973130580c64)*
back to fiddle