SQL-запрос с условными формулами и группировкой

У меня есть таблица в нашей ERP, которая содержит Routing для продуктов, которые мы производим (это называется Routing). Каждый продукт имеет уникальные этапы маршрутизации, на которых имеется такая информация, как время установки и время цикла, необходимые для выполнения одного блока. Что мне нужно сделать, это вернуть таблицу, сгруппированную по номеру детали, которая отображает общее количество часов цикла для данного номера детали. Если бы единицы в таблице были уже в часах, это не было бы проблемой. К сожалению / к счастью, наша ERP позволяет указывать время цикла в нескольких различных единицах. Конечно, этот блок доступен в таблице, но я изо всех сил пытаюсь написать запрос, который сначала преобразует (в большинстве случаев) частей в час в часы в часть, затем суммирует результат для каждого шага маршрутизации и возвращает данные, сгруппированные по частям. число. У меня проблемы с форматированием таблицы, и моя репутация недостаточно высока, чтобы добавить изображение, поэтому я не могу показать, как выглядят данные.

Вот формула, которую я использую в PowerPivot для преобразования в часы.

= IF ([CycleUnit] = "P", 1.0 / [CycleTime], IF ([CycleUnit] = "M", [CycleTime] /60.0, IF ([CycleUnit] = "H", [CycleTime], BLANK ())))

Я новичок в SQL, и любая помощь будет принята с благодарностью.

2 ответа

Как уже упоминали другие, знание вашей системы баз данных будет полезно.

Как насчет чего-то вроде этого:

select sum( case cycleUnit
            when 'P' then 1.0/cycleTime
            when 'M' then cycleTime/60.0
            when 'H' then cycleTime
            end
            ) as cycleHours
from Routing
group by partNumber

Оператор case обрабатывает ваши преобразования. В качестве альтернативы, вы можете попытаться создать скалярную функцию, которая принимает в качестве параметров cycleTime и unit и возвращает преобразованное значение.

Довольно простое время для постановки дела

select 
 part_no,
 sum(case cycle_unit
   when 'P' then 1.0/cycle_time
   when 'M' then cycle_time/60
   when 'H' then cycle_time
 end) as work_hours      
from routing
group by part_no;
Другие вопросы по тегам