簡體   English   中英

創建客戶訂單月度報告

[英]Creating a customer-order monthly report

該報告必須包含以下信息:客戶的姓名,完整地址,舊余額,新余額以及該客戶在該期間(2019年3月31日)已訂購的項目數。假設顯示的當前余額截至2019年2月底。

這是我到目前為止嘗試過的方法,它只顯示該月的訂單,但是我遇到了麻煩,包括問題的舊余額和新余額。 我覺得離要求還差得遠。

select c.name, c.address, c.balance, i.qty 
from customer c, "order" o, order_item i  
where o."date" <='31-Mar-2019';

這些是我正在使用的表

甲骨文SQL

create table customer (  
    name varchar(100) primary key, 
    address varchar(200), 
    balance integer); 

create table "order" ( 
    order_no number primary key, 
    "date" date, 
    cust varchar(100),
    foreign key(cust) references customer(name)); 

create table order_item ( 
    order_no number, 
    item_name varchar(100), 
    qty number,
    primary key (order_no,item_name),
    foreign key(order_no) references "order"(order_no)
);   

每個客戶只能在結果中包含一次(即,一行),並且結果必須按照帳號的升序排列。

您的數據模型存在嚴重問題。

余額通常是一筆錢。 但是,盡管您的order_item表具有qty但沒有相關的成本。 因此,不可能從提供的數據結構中計算新的余額。 看來您缺少表item -具有重要信息。

同樣,毫無意義的是“當前”余額的概念,而沒有任何關於上一次計算該余額的時間的概念。 我們只是應該知道它“截至2019年2月底正確的”

同樣,將customer.name類的東西用作主鍵也很糟糕。 主鍵應該是不變的,人們經常更改其名稱。

最后,用Oracle關鍵字(例如"order""date"作為名稱是很難說的。 不要強迫人們用雙引號將對象名稱引起來。 只是不要。 選擇明智的名稱。

無論如何,讓我們開始工作:

select c.name
       , c.address
       , c.balance as current_balance
       , sum(oi.qty) as total_items_ordered
       , c.balance + (oi.qty * i.price) as new_balance
from customer c
     join "order" o on o.cust = c.name
     join order_item oi on oi.order_no = o.order_no
     join supplier i on i.name = oi.item_name 
 where o."date" <='31-Mar-2019'
 group by c.name
       , c.address
       , c.balance;

暫無
暫無

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

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