Преобразование проданного количества в стандартизированные единицы в SQL

У меня есть результат, содержащий общее количество проданных товаров в разных единицах. Мне нужно привести его к стандартизированным единицам на основе справочной таблицы. Эти стандартизированные единицы могут варьироваться от кг, фунтов или галлонов.

Количество продано:

МатериалЕдиница измеренияКоличествоПродано
1910 г.КГ446780
1910 г.ГАЛ5000
1911 г.ГАЛ2000 г.

Справка :

МатериалFromUnitsToUnitsМножитель
1910 г.ГАЛфунтов7.107
1910 г.фунтовкг0,5
1910 г.КГфунтов2.3
1911 г.ГАЛфунтов9.3
1911 г.фунтовКг.9
1911 г.КГфунтов4.2

Я нуждаюсь :

МатериалЕдиница измеренияКоличествоПроданоСтандартизированные_фунтыСтандартизированный_кгСтандартизированный_GAL
1910 г.КГ446780(446780*2,3)
1910 г.ГАЛ5000(5000*7,1)
1911 г.ГАЛ2000 г.(2000*9,3)

Так в чем проблема это сделать?

Stu 21.03.2022 19:35

также кажется странным, что KG в LBS и LBS в KG не являются точной инверсией.

KeithL 21.03.2022 19:38
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, что Conditional Aggregation в сочетании с JOIN должно помочь.

Select A.Material
      ,A.UnitOfMeasure
      ,A.QuantitySold
      ,Standardised_Lbs = sum( case when B.ToUnits = 'Lbs' then A.QuantitySold * B.Multiplier end )
      ,Standardised_KG  = sum( case when B.ToUnits = 'KG'  then A.QuantitySold * B.Multiplier end )
      ,Standardised_GAl = sum( case when B.ToUnits = 'GAL' then A.QuantitySold * B.Multiplier end )
 From  [QuantitySold] A
 Join  [Reference]    B on A.Material=B.Material 
                       and A.UnitOfMeasure = B.FromUnits
 Group By A.Material
         ,A.UnitOfMeasure
         ,A.QuantitySold

Справочная таблица должна быть заполнена всеми возможными вариантами. Может быть, левое соединение, чтобы найти недостающие ссылки с NULL?

KeithL 21.03.2022 20:14

@KeithL Левое соединение подойдет, но не обязательно. Условная агрегация будет генерировать значения NULL, если ссылочная таблица была "пропущена".

John Cappelletti 21.03.2022 20:18

Спасибо за помощь, это должно установить меня в правильном направлении.

Vishal c 21.03.2022 20:26

@Vishalc Всегда рад помочь

John Cappelletti 21.03.2022 20:26

@KeithL Вы правы в отношении пересечения данных. Например, KG для KG будет иметь коэффициент 1. dbfiddle.uk/…

John Cappelletti 21.03.2022 20:39

Другие вопросы по теме