简体   繁体   中英

Oracle 11g get data from 3 tables

I am trying to get a record from one table and on the basis of that record sum of quantity in another table which has multiple record and then join thrid table to get the price and multiply price with quantity.

order

id status date
1 1 25-12-2022

orderitem

id pid qty Uom(unit of measure)
1 100 5 KG
1 101 10 KG
1 102 15 KG

productstable

pid price Uom(unit of measure)
100 1 KG
101 2 KG
102 3 KG

OUTPUT:

date quantity Price
25-12-2022 30 70

1-Get record from order

2-Sum quantity of that id

3-get price of product id and multiply it with sum quantity in step 2

As I understand the question you need the sum per order id ( 2-Sum quantity of that id ) . If that is the case then you'll need order id for grouping the data:

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 your sample data (added a few more rows):

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 esult:

ORDER_ID ORDER_DATE QTY AMOUNT
1 25-DEC-22 30 70
2 25-DEC-22 30 45
3 25-DEC-22 10 30

Sample data:

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    )

Query begins here:

 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>

(I renamed invalid table ( order ) and column ( date ) names).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM