Хорошо, я объясню вам эту концепцию, и я уверен, что вы сможете сами ее понять.
Ваш окончательный результат, который вы опубликовали со всеми столбцами true и false, которые должны стать временной таблицей, как эта, но с каким-то столбцом идентификации:
SELECT dbo.o3.[s.no] AS [O3_Sn.NO]
,dbo.o5.[s.no] AS [O5_Sn.NO]
,dbo.o3.o3
,dbo.o5.o5
,CASE
WHEN dbo.o3.[s.no] > dbo.o5.[s.no] THEN 'true'
ELSE 'false'
END AS comparisoncolumn
, ROW_NUMBER() OVER(ORDER BY dbo.o3.[s.no]) AS ident_col
INTO #temp
FROM dbo.o3
INNER JOIN dbo.o5
ON dbo.o3.[s.no] = dbo.o5.[s.no]
Тогда вам нужно выбрать из #temp и самостоятельно присоединиться к #temp аналогично тому, как здесь:
SELECT a.*
, CASE WHEN a.comparisoncolumn = b.comparisoncolumn THEN NULL ELSE a.comparisoncolumn END AS final_comparisoncolumn
FROM #temp a
LEFT JOIN #temp b ON a.ident_col = b.ident_col - 1
Затем выполните оператор case, чтобы выяснить, нужно ли вам печатать null, либо true, либо false.
Поэкспериментируйте с этой концепцией, я уверен, что вы сможете отработать ее отсюда.