Вы можете использовать общие возможности XML для вашего спасения.Не очень быстро с майскими строками, но очень мощно:
(кредиты iamdave для макета)
declare @t table(id int,diag1 int,diag2 int,diag3 int,diag4 int,diag5 int,diag6 int,diag7 int,diag8 int,diag9 int,diag10 int);
insert into @t (id, diag5) values(1,12345);
insert into @t (id, diag3) values(2,123);
insert into @t (id, diag8, diag1) values(3,123,12345);
insert into @t (id, diag9, diag2) values(4,345,678);
WITH CreateXML AS
(
SELECT *
,(
SELECT *
FROM @t t2
WHERE t1.id=t2.id
FOR XML PATH('codes'),TYPE
).query('/codes/*[substring(local-name(),1,4)="diag"]') AllCodes
FROM @t t1
)
SELECT *
FROM CreateXML
WHERE AllCodes.exist('/*[. cast as xs:int? >=12345 and . cast as xs:int? <=12349]')=1;
В запросе будет использоваться SELECT *
для создания XML всех столбцов..query()
выберет все элементы, начиная с "diag"
.Возможно, вам придется адаптировать это к вашим потребностям.
.exist()
проверит, находится ли какое-либо значение в этих элементах между вашими границами.Достаточно одного матча.
Удачи!