【发布时间】:2018-01-24 18:25:16
【问题描述】:
我正在尝试获取一个 PLSQL 语句来显示所有客户 ID 列表和每个客户的订单价值总和。下面的代码让我得到了正确的答案,但问题是我有多个具有相同 ID 的客户,我需要将他们的所有订单值加总在只有 1 个 ID 输出而不是多个下。我的代码让我为同一个客户提供多个输出。
Create table sales (customer_ID number(10), product_ID number(10), quantity number(10));
INSERT INTO sales (customer_ID, product_ID, quantity) Values(3,1,23);
INSERT INTO sales (customer_ID, product_ID, quantity) Values(1,2,34);
INSERT INTO sales (customer_ID, product_ID, quantity) Values(1,3,654);
INSERT INTO sales (customer_ID, product_ID, quantity) Values(3,7,32);
INSERT INTO sales (customer_ID, product_ID, quantity) Values(4,3,23);
INSERT INTO sales (customer_ID, product_ID, quantity) Values(3,3,111);
INSERT INTO sales (customer_ID, product_ID, quantity) Values(5,4,6);
Create table products (product_ID number(10), price number(10));
INSERT INTO products (product_ID, price) Values(1,32);
INSERT INTO products (product_ID, price) Values(2,121);
INSERT INTO products (product_ID, price) Values(3,3000);
INSERT INTO products (product_ID, price) Values(4,621);
INSERT INTO products (product_ID, price) Values(5,363);
INSERT INTO products (product_ID, price) Values(6,32);
INSERT INTO products (product_ID, price) Values(7,3);
INSERT INTO products (product_ID, price) Values(8,432);
INSERT INTO products (product_ID, price) Values(9,11);
INSERT INTO products (product_ID, price) Values(10,73);
declare
cursor cur is select unique sales.quantity,products.price,sales.customer_ID
from sales,products
where sales.product_id=products.product_id
order by customer_ID desc;
prod number;
quan number(10);
pri number(10);
c_id number(10);
begin
open cur;
loop
fetch cur into quan,pri,c_id;
exit when cur%notfound;
prod:=pri*quan;
DBMS_OUTPUT.PUT_LINE('customer_id =' || c_id);
DBMS_OUTPUT.PUT_LINE('quantity value =' || quan);
DBMS_OUTPUT.PUT_LINE('price =' || pri);
DBMS_OUTPUT.PUT_LINE('The total value of customer purchases is = ' || prod);
end loop;
close cur;
END
请注意。
【问题讨论】:
-
请提供create table 语句,并确保在insert 语句中添加INSERT into table_name 子句。而且,你真的需要使用
PL/SQL吗?可以用普通的SQL完成。 PL/SQLLOOP,row-by-row又名slow-by-slow. -
更改已完成,是的,我需要通过 pl/sql 获取它,代码已准备好我只需要 1 个输出下的相同客户 ID 的总和
-
您期望的输出是什么,为什么您“必须”在 PL/SQL 中这样做?请使用预期输出更新您的问题。