SQL - лимит времени, в течение которого присоединение показывает результат - PullRequest
0 голосов
/ 09 марта 2020

Я отчаянно пытался заставить это работать, и я застрял. Любая помощь приветствуется! У меня есть две таблицы. Таблица 1 - клиенты, а таблица 2 - местоположение и количество инвентаря. Проблема в том, что мне нужно, чтобы количество ячеек, которое рекомендуется ограничить, количеством, поэтому, как только оно порекомендует все количество, оно перестает рекомендовать этот ящик ... Это то, что ставит меня в тупик.

Table 1
Customer | Item | Qty
1 | Item1 | 2
1 | Item2 | 1
2 | Item1 | 1
3 | Item1 | 1
4 | Item1 | 1
5 | Item1 | 1
6 | Item1 | 1

Table 2
Item | Bin | Qty
Item1 | A1 | 1
Item1 | A84 | 2
Item1 | C32 | 2
Item1 | D01 | 1

Вывод перестал бы рекомендовать первое совпадение, как только количество совпадений достигнет числа кол-во ... Я полностью застрял ...

Вывод будет выглядеть Клиент | Пункт | мусорное ведро 1 | Item1 | A1 1 | Item2 | A84 2 | Item1 | A84 3 | Item1 | C32 4 | Item1 | C32 5 | Item1 | D01 6 | Item1 | (так как другого бункера не осталось) Сценарий до сих пор с помощью Ponder является ...

SELECT
    CUST.CUSTOMER, CUST.ITEM, BIN
FROM (
        SELECT 
            ROW_NUMBER() OVER (PARTITION BY CUSTOMER, ITEM ORDER BY CUSTOMER ASC, ITEM ASC) AS RN, 
            CUSTOMER, 
            ITEM 
        FROM CUSTOMERS 
    ) CUST
LEFT JOIN (
            SELECT 
                ITEM,
                BIN, 
                LAG(Q2, 1, 0) OVER (PARTITION BY ITEM, BIN ORDER BY ITEM ASC, BIN ASC) Q1, 
                Q2
            FROM (
                    SELECT
                        ITEM,
                        BIN,
                        SUM(QTY) OVER (PARTITION BY ITEM, BIN ORDER BY ITEM ASC, BIN ASC) Q2
                    FROM INVENTORY I
                    )
                ) INV ON Q1 < RN AND Q2 <= RN AND CUST.ITEM = INV.ITEM

1 Ответ

0 голосов
/ 09 марта 2020

Количество строк в таблице клиентов. Составьте совокупную сумму количеств в табличных местоположениях. Присвойте строки от клиентов местоположениям, используя левое соединение и определенные диапазоны. Вы не указали, какую RDBM вы используете, так что вот решение Oracle, но оно использует стандартные функции, которые должны работать в большинстве баз данных, или, по крайней мере, вы легко можете применить эту логику c:

select customer, item, bin
  from (select row_number() over (order by customer) as rn, customer, item 
          from customers)
  left join (
        select bin, lag(q2, 1, 0) over (order by bin) q1, q2 
          from (select bin, sum(qty) over (order by bin) q2 from locations))
    on q1 < rn and rn <= q2

dbfiddle

Похоже, что item не используется для объединения строк (в вашем примере у вас нет Item2 в местах). Если вам это нужно, используйте partition by в функциях analyti c и используйте item в условии соединения.

...