У меня есть результат, содержащий общее количество проданных товаров в разных единицах. Мне нужно привести его к стандартизированным единицам на основе справочной таблицы. Эти стандартизированные единицы могут варьироваться от кг, фунтов или галлонов.
Количество продано:
Материал | Единица измерения | КоличествоПродано |
---|---|---|
1910 г. | КГ | 446780 |
1910 г. | ГАЛ | 5000 |
1911 г. | ГАЛ | 2000 г. |
Справка :
Материал | FromUnits | ToUnits | Множитель |
---|---|---|---|
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) |
также кажется странным, что KG в LBS и LBS в KG не являются точной инверсией.
Похоже, что 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 Левое соединение подойдет, но не обязательно. Условная агрегация будет генерировать значения NULL, если ссылочная таблица была "пропущена".
Спасибо за помощь, это должно установить меня в правильном направлении.
@Vishalc Всегда рад помочь
@KeithL Вы правы в отношении пересечения данных. Например, KG для KG будет иметь коэффициент 1. dbfiddle.uk/…
Так в чем проблема это сделать?