У меня есть следующий сценарий 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. Это распределение номеров основано на соотношении поставляемого объема в процентах от поставщика. Это распределение варьируется в зависимости от соотношения объемов поставляемых предметов.
Теперь я попробовал метод использования RANK, как показано ниже, с использованием временных таблиц.
временная таблица 1 будет иметь магазин, идентификатор возврата, товар, общее количество идентификаторов возврата и ранг идентификатора возврата.
временная таблица 2 будет иметь магазин, поставщик, товар, его пропорцию и ранг пропорции.
Теперь я сталкиваюсь с трудностями при распределении идентификаторов лучших возвратов для лучшего поставщика, как показано выше. Поскольку в SQL нет циклов, как я могу этого добиться. Я связывал несколько способов сделать это.
Моя среда — Teradata (достаточно ANSI SQL).