CREATE TABLE PRODUCT ( PRODUCTID VARCHAR2(20) , SALEAMOUNT VARCHAR2(20) , YEARMONTH VARCHAR2(20) ) 如何用plSQL去实现 1)19年各月销量默认为0,同期增长值=当月销量-去年当月销量,同比=同期增长值/去年当月销量,查询结果输出年月、当月销量、同期增长值、同比 ,结果按年月顺序排序
时间: 2024-03-14 19:43:30 浏览: 40
mysqlgroupby用法共2页.pdf.zip
您可以使用以下PL/SQL存储过程来实现您的需求:
```
CREATE OR REPLACE PROCEDURE calculate_sales_growth AS
BEGIN
-- 创建临时表来存储结果
CREATE TABLE temp_sales_growth (
yearmonth VARCHAR2(20),
sales_amount NUMBER(10,2),
growth_value NUMBER(10,2),
year_on_year_growth NUMBER(10,2)
);
-- 查询19年各月销量
FOR month IN 1..12 LOOP
DECLARE
sales_amount NUMBER(10,2);
BEGIN
SELECT SUM(SALEAMOUNT)
INTO sales_amount
FROM PRODUCT
WHERE YEARMONTH = '2019' || LPAD(month, 2, '0');
-- 计算同期增长值和同比
DECLARE
last_year_month VARCHAR2(20) := '2018' || LPAD(month, 2, '0');
last_year_sales NUMBER(10,2);
growth_value NUMBER(10,2);
year_on_year_growth NUMBER(10,2);
BEGIN
SELECT SUM(SALEAMOUNT)
INTO last_year_sales
FROM PRODUCT
WHERE YEARMONTH = last_year_month;
IF last_year_sales IS NOT NULL THEN
growth_value := sales_amount - last_year_sales;
year_on_year_growth := growth_value / last_year_sales;
ELSE
growth_value := 0;
year_on_year_growth := 0;
END IF;
-- 插入结果到临时表
INSERT INTO temp_sales_growth (yearmonth, sales_amount, growth_value, year_on_year_growth)
VALUES ('2019' || LPAD(month, 2, '0'), sales_amount, growth_value, year_on_year_growth);
END;
END;
END LOOP;
-- 查询结果并排序
SELECT *
FROM temp_sales_growth
ORDER BY yearmonth;
-- 删除临时表
DROP TABLE temp_sales_growth;
END;
```
这个存储过程会根据PRODUCT表中的数据计算19年每个月的销售额、同期增长值和同比,并将结果存储在一个临时表中。最后,它会查询临时表并按照年月排序输出结果。
您可以通过调用该存储过程来执行计算和查询操作,例如:
```
EXECUTE calculate_sales_growth;
```
希望这个PL/SQL存储过程能够为您提供帮助!
阅读全文