簡體   English   中英

Oracle 11g 從3個表中獲取數據

[英]Oracle 11g get data from 3 tables

我試圖從一個表中獲取一條記錄,並基於另一個表中的記錄數量總和,該表中有多個記錄,然后加入第三個表以獲取價格並將價格乘以數量。

命令

ID 狀態 日期
1個 1個 25-12-2022

訂單項目

ID 進程號 數量 Uom(計量單位)
1個 100 5個 公斤
1個 101 10 公斤
1個 102 15 公斤

產品表

進程號 價格 Uom(計量單位)
100 1個 公斤
101 2個 公斤
102 3個 公斤

OUTPUT:

日期 數量 價格
25-12-2022 30 70

1-獲取訂單記錄

2-那個id的總和數量

3-獲取產品 ID 的價格並將其乘以步驟 2 中的總數量

據我了解,您需要每個訂單 ID的總和(該 ID 的 2-Sum 數量) 如果是這種情況,那么您將需要訂單 ID 來對數據進行分組:

SELECT      o.ID "ORDER_ID", o.ORDER_DATE,
            Sum(oi.QTY) "QTY", Sum(oi.QTY * p.PRICE) "AMOUNT"
FROM        order_tbl o
INNER JOIN  order_items oi ON(oi.ID = o.ID)
INNER JOIN  products p ON(p.PID = oi.PID)
GROUP BY    o.ID,  o.ORDER_DATE
ORDER BY    o.ID

使用您的示例數據(添加了幾行):

with
    order_tbl (ID, STATUS, ORDER_DATE) AS
        (   
            Select 1, 1, To_Date('2022-12-25', 'yyyy-mm-dd') From Dual Union All
            Select 2, 1, To_Date('2022-12-25', 'yyyy-mm-dd') From Dual Union All
            Select 3, 1, To_Date('2022-12-25', 'yyyy-mm-dd') From Dual 
        ),
    order_items (ID, PID, QTY, UOM) AS
        (
            Select 1, 100,  5, 'KG' From Dual Union All
            Select 1, 101, 10, 'KG' From Dual Union All
            Select 1, 102, 15, 'KG' From Dual Union All
      --  added order 2
            Select 2, 101, 15, 'KG' From Dual Union All
            Select 2, 100, 15, 'KG' From Dual Union All
      --  added order 3
            Select 3, 102, 10, 'KG' From Dual 
        ),
    products (PID, PRICE, UOM) as
        (
            Select 100, 1, 'KG' From Dual Union All
            Select 101, 2, 'KG' From Dual Union All
            Select 102, 3, 'KG' From Dual
        )

R 結果:

訂單號 訂購日期 數量 數量
1個 22 年 12 月 25 日 30 70
2個 22 年 12 月 25 日 30 45
3個 22 年 12 月 25 日 10 30

樣本數據:

SQL> with
  2  t_order (id, status, datum) as
  3    (select 1, 1, date '2022-12-22' from dual),
  4  orderitem (id, pid, qty) as
  5    (select 1, 100, 5 from dual union all
  6     select 1, 101, 10 from dual union all
  7     select 1, 102, 15 from dual
  8    ),
  9  productstable (pid, price) as
 10    (select 100, 1 from dual union all
 11     select 101, 2 from dual union all
 12     select 102, 3 from dual
 13    )

查詢從這里開始:

 14  select o.datum,
 15    sum(i.qty) quantity,
 16    sum(i.qty * p.price) price
 17  from t_order o join orderitem i on i.id = o.id
 18                 join productstable p on p.pid = i.pid
 19  group by o.datum;

DATUM        QUANTITY      PRICE
---------- ---------- ----------
22-12-2022         30         70

SQL>

(我重命名了無效的表( order )和列( date )名稱)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM