Постановка задачи: Из ряда произвольной последовательности чисел выбрать все комбинации, которые образуют заданную сумму.
Пример:
Входные данные 1, 2, 3, 4, 5
Где сумма = 9
ВЫБРАТЬ
ВТ_01.Поле1
ПОМЕСТИТЬ BT_Булево
ИЗ
(ВЫБРАТЬ
0 КАК Поле1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
1) КАК ВТ_01
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
BT_1.Поле1,
BT_2.Поле1 КАК Поле2,
BT_3.Поле1 КАК Поле3,
BT_4.Поле1 КАК Поле4,
BT_5.Поле1 КАК Поле5
ПОМЕСТИТЬ ВТ_Коэф
ИЗ
BT_Булево КАК BT_1,
BT_Булево КАК BT_2,
BT_Булево КАК BT_3,
BT_Булево КАК BT_4,
BT_Булево КАК BT_5
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Коэф.Поле1 * &Число1 + ВТ_Коэф.Поле2 * &Число2 + ВТ_Коэф.Поле3 * &Число3 + ВТ_Коэф.Поле4 * &Число4 + ВТ_Коэф.Поле5 * &Число5 КАК Результат,
ВТ_Коэф.Поле1 * &Число1 КАК Число1,
ВТ_Коэф.Поле2 * &Число2 КАК Число2,
ВТ_Коэф.Поле3 * &Число3 КАК Число3,
ВТ_Коэф.Поле4 * &Число4 КАК Число4,
ВТ_Коэф.Поле5 * &Число5 КАК Число5
ИЗ
ВТ_Коэф КАК ВТ_Коэф
ГДЕ ВТ_Коэф.Поле1 * &Число1 + ВТ_Коэф.Поле2 * &Число2 + ВТ_Коэф.Поле3 * &Число3 + ВТ_Коэф.Поле4 * &Число4 + ВТ_Коэф.Поле5 * &Число5 = 9
Во втором пакете запроса идет декартовое произведение бинарного множества. Тут мы получаем ограничение по количеству входных данных:
для 20 чисел мы получим (2 в степени 20) = 1 048 576 строке
Пробовал для 23 чисел, но уже нужно подождать...
Во вложении - поиск с произвольным количеством входных данных.