TSQL Циклический просмотр записей таблицы и сравнение со второй таблицей - PullRequest
2 голосов
/ 03 сентября 2010

У меня есть две временные таблицы, заполненные запросами TSQL.

Таблица Темп A , содержащая Местоположение, Предмет и общее количество инвентаря.

Временная таблица B , содержащая Местоположение, Предмет, Номер заказа на продажу и отрицательный инвентарный подсчет.

Я хотел бы пройтись по каждому предмету в Таблице B и вычесть отрицательный счет инвентаря из таблицы A, где местоположение и предмет соответствуют. Как только запас достигает <= 0 в Таблице B, я хочу вывести каждый заказ в 3-ю таблицу, в которой содержатся Местоположение, Позиция и Номер заказа на продажу. </p>

ПРИМЕР ТАБЛИЦЫ A

Item|Location|Inventory
1    A        10
2    B        20

Пример таблицы B

Order|Item|Location|QuanityUsed
ABC  |1   |A       |5
ZYX  |2   |B       |10
DEF  |1   |A       |6

DEF будет выводиться в ТАБЛИЦУ C, потому что не хватает запасов для выполнения заказа после вычитания заказа ABC.

Как мне это сделать?

1 Ответ

2 голосов
/ 03 сентября 2010

Вы можете использовать aubquery для вычисления промежуточного итога.Во внешнем запросе вы можете указать, что промежуточный итог должен быть больше, чем общий инвентарь:

select  location
,       item
,       [Order]
,       TotalInventory
,       RunningTotal
from    (
        select  [order].location
        ,       [order].item
        ,       [order].[Order]
        ,       (
                select  SUM(inventory)
                from    @a inv
                where   inv.item = [order].item
                        and inv.location = [order].location
                ) as TotalInventory
        ,       (
                select  SUM(QuantityUsed)
                from    @b prevorder
                where   prevorder.item = [order].item
                        and prevorder.location = [order].location
                        and prevorder.[order] <= [order].[order]
                ) as RunningTotal
        from    @b [order]
        ) as OrderExtended
where   TotalInventory < RunningTotal

Тестовые данные:

declare @a table (item int, location char(1), inventory int)
insert into @a select 1, 'A', 10
union all select 2, 'B', 20
declare @b table ([order] char(3), item int, location char(1), QuantityUsed int)
insert into @b select 'ABC', 1, 'A', 5
union all select 'ZYX', 2, 'B', 10
union all select 'DEF', 1, 'A', 6

Это печатает:

location  item  Order  TotalInventory  RunningTotal
A         1     DEF    10              11

Таким образом, порядок DEF приводит к тому, что местоположение A превышает свой инвентарь предмета 1 на 10 - 11 = 1.

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