Несколько запросов SQL одного поля - PullRequest
0 голосов
/ 19 января 2012

У меня есть таблица (Inventory_Line), где LID - автоинкремент, а IID - одно число, относящееся к дате инвентаризации, PID - числовая часть #.Мы используем эту таблицу для инвентаря.

LID  IID  NAME    PID  QTY
---  ---  ------  ---  ---
1    1    Part A  213  12
2    1    Part B  200  15
3    2    Part A  213  9
4    2    Part B  200  7

У нас также есть таблица Order_Line

OLID  OID  NAME    PID  QTY
----  ---  ------  ---  ---
1     217  Part A  213  12
2     217  Part B  200  15
3     218  Part A  213  9
4     218  Part B  200  7

Моя цель показать

((Previous Inventory Qty (Inventory_Line.IID=1)) AS PREV_INV + 
(ORDERED Qty (Order_Line.OID = 217 AND 218)) AS ORDERED - 
(Current Inventory Qty Inventory_Line.IID=2) AS CURRENT_INV) AS SOLD 
WHERE PID = X

Вывод будет такой:

PID  NAME    PREV_INV  ORDERED  CURRENT_INV  SOLD
---  ------  --------  -------  -----------  ----
213  Part A  12        21       9            24

Мы используем MS Access, и у меня есть некоторый опыт работы с Joins, но я застрял на том, как это осуществить.Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 19 января 2012

Думаете ли вы о чем-то в этих строках?

SELECT t.pid,
       Nz([pi].[qty], 0) + Nz([o].[qty], 0) - Nz([s].[qty], 0) AS dat
FROM   (((SELECT DISTINCT pid
         FROM   inventory_line) AS t
         LEFT JOIN (SELECT *
                    FROM   inventory_line
                    WHERE  iid = 2) AS pi
           ON t.pid = pi.pid)
        LEFT JOIN (SELECT *
                   FROM   inventory_line
                   WHERE  iid = 3) AS s
          ON t.pid = s.pid)
       LEFT JOIN (SELECT *
                  FROM   order_line
                  WHERE  oid = 217
                          OR oid = 218) AS o
         ON t.pid = o.pid
WHERE  (( ( t.pid ) = [Enter:] ))

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


Комментарии

SELECT t.pid,
       t.name,
       pi.qty,
       o.q,
       s.qty,
       Nz([pi].[qty]) + Nz([o].[q]) - Nz([s].[Qty]) AS sold
FROM   (((SELECT DISTINCT pid,
                         [Name]
         FROM   inventory_line) AS t
         LEFT JOIN (SELECT pid,
                           qty
                    FROM   inventory_line
                    WHERE  iid = 1) AS pi
           ON t.pid = pi.pid)
        LEFT JOIN (SELECT pid,
                          qty
                   FROM   inventory_line
                   WHERE  iid = 2) AS s
          ON t.pid = s.pid)
       LEFT JOIN (SELECT pid,
                         SUM(qty) AS q
                  FROM   order_line
                  WHERE  oid = 217
                          OR oid = 218
                  GROUP  BY pid) AS o
         ON t.pid = o.pid
WHERE  (( ( t.pid ) = [Enter:] ))
0 голосов
/ 20 января 2012

Я не смог понять, откуда взялись 24 в столбце SOLD, но вот другое решение для остальных

SELECT Order_Line.PID, Order_Line.NAME, DLookUp("[QTY]","[Order_Line]","[OID]=" & [OID]-1 & " AND PID=" & [PID]) AS PREV_INV, DSum("[QTY]","[Order_Line]","[PID]=" & [PID]) AS ORDERED, Order_Line.QTY AS CURRENT_INV FROM Order_Line;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...