繁体   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