У меня есть сценарий sql, который я пытаюсь улучшить.
Существует таблица «Возвраты», в которой указаны идентификаторы возвращенных товаров в магазине для предмета. Его структура, как показано ниже.
Returns
-------------------------
Return ID | Shop | Item
-------------------------
1 Shop1 Item1
2 Shop1 Item1
3 Shop1 Item1
4 Shop1 Item1
5 Shop1 Item1
Существует еще одна таблица «Поставщик» с магазином, поставщиком и товаром, как показано ниже.
Supplier
---------------------------------
Supplier | Shop | Item | Volume
---------------------------------
supp1 Shop1 Item1 20%
supp2 Shop1 Item1 80%
Теперь, как вы видите, supp1 поставляет 20% от общего объема item1, а supp2 поставляет 80% Item1 в магазин1. И было 5 возвратов предметов против того же Item1 для того же Shop1.
Теперь мне нужно выделить любые четыре идентификатора возврата для Supp1 и оставшийся один идентификатор возврата для Supp2. Это распределение чисел основано на соотношении поставляемого объема в процентах от поставщика. Это распределение варьируется в зависимости от соотношения объема поставляемых предметов.
Теперь я попробовал метод использования рангов, как показано ниже, с использованием временных таблиц.
временная таблица 1 будет иметь магазин, идентификатор возврата, предмет, общее количество идентификаторов возврата и ранг идентификатора возврата.
временная таблица 2 будет иметь магазин, Поставщика, Предмет и его пропорцию и ранг пропорции.
Теперь я сталкиваюсь с трудностью при распределении идентификаторов с наибольшим возвратом среди поставщиков, как показано выше. Как SQL не имеет циклов, как я могу добиться этого. Я связывал несколько способов сделать это.
Моя среда - Teradata (достаточно ANSI SQL).