我想从三 (3) 个表中获取每月总销售额增长。有人可以告诉我该怎么做吗?
表1
月 | 金额 |
---|---|
2023 年 9 月 | 2.00 |
2023 年 10 月 | 3.00 |
2023 年 10 月 | 1.00 |
表2
月 | 金额 |
---|---|
2023 年 9 月 | 1.00 |
2023 年 10 月 | 2.00 |
2023 年 10 月 | 2.00 |
表3
月 | 金额 |
---|---|
2023 年 9 月 | 5.00 |
2023 年 10 月 | 2.00 |
2023 年 10 月 | 1.00 |
这是我尝试过的
WITH CTE AS (
SELECT OrderDate, Amount FROM Table1
UNION ALL
SELECT OrderDate, Amount FROM Table2
UNION ALL SELECT OrderDate, Amount FROM Table3)
SELECT
Datepart(Month, OrderDate) as
monthly_sales, Sum(Amount) As monthly_sales FROM CTE Group by Datepart(Month, OrderDate),
CTE2 AS (SELECT *, lag(monthly_sales) over (order by Month ) as prev_month_sales FROM CTE ),
CTE3 AS (SELECT *, 100*(monthly_sales - prev_month_sales)/(prev_month_sales) as sales_growth FROM CTE2)
SELECT * from CTE3
预期输出。
**销售增长**
月 | 每月_销售额 | 上月销售额 | 销售增长 |
---|---|---|---|
2023 年 9 月 | 8.00 | 0 | 0 |
2023 年 10 月 | 7.00 | 8.0 | 12.52 |
2023 年 10 月 | 4.00 | 7.0 | -42.86 |
我们可以将所有数据包含在 1 个 CTE 中,然后与滞后数据连接。这是我的解决方案:
-- Create the tables
CREATE TABLE Table1 (
[Month] date,
Amount decimal(18, 2)
);
CREATE TABLE Table2 (
[Month] date,
Amount decimal(18, 2)
);
CREATE TABLE Table3 (
[Month] date,
Amount decimal(18, 2)
);
-- Insert data into the tables
INSERT INTO Table1 ([Month], Amount)
VALUES
('2023-09-01', 2.00),
('2023-10-01', 3.00),
('2023-10-01', 1.00);
INSERT INTO Table2 ([Month], Amount)
VALUES
('2023-09-01', 1.00),
('2023-10-01', 2.00),
('2023-10-01', 2.00);
INSERT INTO Table3 ([Month], Amount)
VALUES
('2023-09-01', 5.00),
('2023-10-01', 2.00),
('2023-10-01', 1.00);
-- Calculate sales growth
WITH CombinedData AS (
SELECT [Month], SUM(Amount) AS monthly_sales
FROM (
SELECT [Month], Amount FROM Table1
UNION ALL
SELECT [Month], Amount FROM Table2
UNION ALL
SELECT [Month], Amount FROM Table3
) AS Combined
GROUP BY [Month]
),
SalesGrowth AS (
SELECT
FORMAT([Month], 'MMM yyyy') [Month],
monthly_sales,
LAG(monthly_sales, 1, 0) OVER (ORDER BY [Month]) AS prev_month_sales,
CASE
WHEN LAG(monthly_sales, 1, 0) OVER (ORDER BY [Month]) = 0 THEN 0
ELSE (monthly_sales - LAG(monthly_sales, 1, 0) OVER (ORDER BY [Month])) * 100.0 / LAG(monthly_sales, 1, 0) OVER (ORDER BY [Month])
END AS sales_growth
FROM CombinedData
)
SELECT [Month], monthly_sales, prev_month_sales, sales_growth
FROM SalesGrowth;
DROP TABLE IF EXISTS Table1
DROP TABLE IF EXISTS Table2
DROP TABLE IF EXISTS Table3
这是示例输出:
这里是示例小提琴链接
注意:我根据百分比(乘以 100)创建
sales_growth
。您可以更改以使其适合您的要求