Я тут, короче, на досуге сделал запрос, вдруг кому пригодится. Там у нас при расчете протяженности сетей есть такая проблема, что для участков с двойной проводимостью длину участка следует умножать на два, а участки с отключенной подающей или обратной линией надо считать без умножения. Желательно делать это прям в запросе, причем так, чтоб расчет был независимо от количества созданных в слое пользовательских режимов участков. Условием является то, что при добавлении новой категории участков, в структуре слоя создается четыре режима участка: 1 - включен, 2 - отключен, 3 - отключен обратный, 4 - отключен подающий. Таким образом, длина участков с номером режимов modeid = 1,2,5,6,9,10, ... умножается на 2, а длина участков с modeid=3,4,7,8,11,12,... не изменяется. И вот пример, с группировкой по диаметрам и выводом расчетной протяженности по карте (для сравнения данных в БД с данными геометрии):
SEL ECT [Внутpенний диаметp подающего тpубопpовода, м],
Sum(iif(Round((modeid/4-Floor(modeid/4))*4,0) > 0 and Round((modeid/4-Floor(modeid/4))*4,0) < 3, [Длина участка, м]*2, [Длина участка, м])) as "Протяженность по БД",
Round(Sum(iif(Round((modeid/4-Floor(modeid/4))*4,0) > 0 and Round((modeid/4-Floor(modeid/4))*4,0) < 3, geometry.length()*2, geometry.length())),4) as "Протяженность по карте Zulu"
FR OM [Название слоя]
GROUP BY [Внутpенний диаметp подающего тpубопpовода, м]
Внимание вопрос. Можно ли как-нибудь упростить выражения в запросе (например, введя переменную)? А то я чего-то в SQL не силён.
P.S. я с детства ужасно боюсь вещественных чисел с плавающей запятой, поэтому в выражениях на всякий случай стоят лишние операторы Round с округлением до целого числа.