Here's one way:declare @t table (id int, column1 char(5), column2 char(5), column3 char(5))insert into @t(id, column1, column2, column3) values (1, 'Text1', 'Text4', null), (2, 'Text1', 'Text2', 'Text3'); with src as (select case when isnull(t1.column1, '') <> isnull(t2.column1, '') then 'Column1 :' + isnull(t1.column1, '') + ' Old ' + isnull(t2.column1, '') + ' New' end col1txt , case when isnull(t1.column2, '') <> isnull(t2.column2, '') then 'Column2 :' + isnull(t1.column2, '') + ' Old ' + isnull(t2.column2, '') + ' New' end col2txt , case when isnull(t1.column3, '') <> isnull(t2.column3, '') then 'Column3 :' + isnull(t1.column3, '') + ' Old ' + isnull(t2.column3, '') + ' New' end col3txtfrom @t t1cross join @t t2where t2.id = t1.id+1 and ( isnull(t1.column1, '') <> isnull(t2.column1, '') or isnull(t1.column2, '') <> isnull(t2.column2, '') or isnull(t1.column3, '') <> isnull(t2.column3, '') ))select pvt.txt from srcunpivot (txt for col in (col1txt, col2txt, col3txt)) pvt