RUS  ENG 

Протяженность сети в трубном исчислении

Страницы: 1
RSS
Протяженность сети в трубном исчислении, SQL-запрос
 
Я тут, короче, на досуге сделал запрос, вдруг кому пригодится. Там у нас при расчете протяженности сетей есть такая проблема, что для участков с двойной проводимостью длину участка следует умножать на два, а участки с отключенной подающей или обратной линией надо считать без умножения. Желательно делать это прям в запросе, причем так, чтоб расчет был независимо от количества созданных в слое пользовательских режимов участков. Условием является то, что при добавлении новой категории участков, в структуре слоя создается четыре режима участка: 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 с округлением до целого числа.
Изменено: Take-oFF - 25.01.2022 09:53:34
 
Take-oFF, добрый день!
Спасибо за предоставленный пример запроса.
В этом запросе выражение:
Код
Round((modeid/4-Floor(modeid/4))*4,0)
, которое используется для получения остатка от деления на 4 (насколько я могу судить) можно упростить до:
Код
modeid % 4
Страницы: 1