SQL-запрос для добавления значения столбца для сравнения с другим столбцом - PullRequest
1 голос
/ 27 декабря 2011

у меня две таблицы

table_inventory
    List item
    inventory_rack_key(primarykey)
    node_key
    rack_id
    inventory_item_key
    in_coming_qty,locked_qty
    quantity

table_item
    inventory_item_key(primary key)
    item_id,product_zone

Пример таблицы приведен здесь ТАБЛИЦЫ БД Мне нужен запрос, чтобы узнать те элементы, для которых (net_qty) , т. Е. Разница ч / б сумма in_coming_qty & quantity & locked_qty отрицательна.организовано node_key,rack_id, item_id,net_qty Примечание: каждый отдельный набор {node_key,rack_id, item_id,net_qty} будет иметь только 1 строку на выходе.Например, :{node_key,rack_id, item_id} = {ABD101, RK-01,562879} имеет 4 строки в table_inventory , но в выводе net_qty = -78 (одна строка).

Выполненный мной запрося результат, но мы можем сделать это как-то иначе?

SELECT l.node_key, 
       l.rack_id, 
       i.item_id, 
       ( SUM(l.quantity + l.in_coming_qty) - SUM(l.locked_qty) ) AS net_qty 
FROM   table_inventory l, 
       table_item i 
WHERE  l.inventory_item_key = i.inventory_item_key 
GROUP  BY l.node_key, 
          l.rack_id, 
          i.item_id 
HAVING SUM(l.quantity + l.in_coming_qty) - SUM(l.locked_qty) < 0 

1 Ответ

4 голосов
/ 27 декабря 2011

Не совсем. Есть такой минорный вариант:

select v.* from (
SELECT l.node_key, 
       l.rack_id, 
       i.item_id, 
       SUM(l.quantity + l.in_coming_qty - l.locked_qty) AS net_qty 
FROM   table_inventory l, 
       table_item i 
WHERE  l.inventory_item_key = i.inventory_item_key 
GROUP  BY l.node_key, 
          l.rack_id, 
          i.item_id
) v
where net_qty < 0 

- это означает, что вычисление SUM необходимо кодировать только один раз, но вам все равно нужно делать СУММУ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...