Я предлагаю сначала получить все возможные факторы -1, 0 и 1 на позицию. Например:
-1, -1, -1, -1, -1
-1, -1, -1, -1, 0
-1, -1, -1, -1, +1
-1, -1, -1, 0, -1
-1, -1, -1, 0, 0
-1, -1, -1, 0, +1
...
Затем умножьте каждый фактор на каждое значение и посмотрите, получите ли вы желаемый результат.
Я использую рекурсивный запрос для построения факторов. Для простоты здесь я использую шесть значений (пять операндов и один результат).
with singlefactors (factor) as
(
select -1 union all select 0 union all select 1
)
, cte (f1, f2, f3, f4, f5, num) as
(
select factor, 0, 0, 0, 0, 1 from singlefactors
union all
select
cte.f1,
case when cte.num = 1 then singlefactors.factor else cte.f2 end,
case when cte.num = 2 then singlefactors.factor else cte.f3 end,
case when cte.num = 3 then singlefactors.factor else cte.f4 end,
case when cte.num = 4 then singlefactors.factor else cte.f5 end,
cte.num + 1
from cte
cross join singlefactors
where cte.num < 5
)
, factors as
(
select f1, f2, f3, f4, f5 from cte where num = 5
)
select *
from mytable m
join factors f on m.col1 * f.f1 + m.col2 * f.f2 +
m.col3 * f.f3 + m.col4 * f.f4 +
m.col5 * f.f5 = m.col6
order by m.col1, m.col2, m.col3, m.col4, m.col5, m.col6, f.f1, f.f2, f.f3, f.f4, f.f5;
Результат:
+ -----+------+------+------+------+------+----+----+----+----+----+
| col1 | col2 | col3 | col4 | col5 | col6 | f1 | f2 | f3 | f4 | f5 |
+ -----+------+------+------+------+------+----+----+----+----+----+
| 1 | 2 | 3 | 4 | 5 | 6 | -1 | -1 | 0 | 1 | 1 |
| 1 | 2 | 3 | 4 | 5 | 6 | -1 | 0 | 1 | 1 | 0 |
| 1 | 2 | 3 | 4 | 5 | 6 | -1 | 1 | 0 | 0 | 1 |
| ... | | | | | | | | | | |
+ -----+------+------+------+------+------+----+----+----+----+----+
Демонстрация: https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=872201f49f9cace4ad62be59465bca87
Возможно, вы хотите, чтобы результат выглядел несколько лучше, но это не должно быть слишком сложно, чтобы выполнить sh отсюда.