在 Microsoft Access 中创建查询方差(差异)分析
Creating a query variance (difference) analysis in Microsoft Access
我有一项特定任务需要帮助。
基本上我有销售 table:
Product_ID/No Product_Name Date Revenue
A APPLE 01-01-20 50
B BANANA 01-01-20 100
A APPLE 15-12-19 50
B BANANA 15-12-19 150
C CHERRY 15-12-19 50
A APPLE 01-01-20 60
我需要从这个 table 每月创建一个差异报告 (difference/movement),其中 headers:
Product_ID/No Product_Name Current_Month Previous_Month Variance
A Apple 110 50 60
B Banana 100 150 -50
C Cherry 50 -50
问题:
我该怎么做?
这会是一系列 SQL 声明吗?
如有任何建议,我们将不胜感激。
谢谢
您可以按产品分组并使用条件聚合:
SELECT
[Product_ID/No], [Product_Name],
SUM(IIF(DATESERIAL(YEAR(DATE()), MONTH(DATE()), 1) = DATESERIAL(YEAR([Date]), MONTH([Date]), 1), Revenue, NULL)) AS Current_Month,
SUM(IIF(DATESERIAL(YEAR(DATEADD("m", -1, DATE())), MONTH(DATEADD("m", -1, DATE())), 1) = DATESERIAL(YEAR([Date]), MONTH([Date]), 1), Revenue, NULL)) AS Previous_Month,
Nz(Current_Month)- Nz(Previous_Month) AS Variance
FROM Sales
GROUP BY [Product_ID/No], [Product_Name]
结果:
Product_ID/No Product_Name Current_Month Previous_Month Variance
A APPLE 110 50 60
B BANANA 100 150 -50
C CHERRY 50 -50
此查询针对 SQL 服务器:
WITH Temp
AS (SELECT [Product_ID/No],
[Product_Name],
ISNULL(SUM(IIF(DATEPART(MONTH, GETDATE()) = DATEPART(MONTH, [Date]), Revenue, NULL)), 0) AS Current_Month,
ISNULL(SUM(IIF(DATEPART(MONTH, DATEADD(MONTH, -1, GETDATE())) = DATEPART(MONTH, [Date]), Revenue, NULL)), 0) AS Previous_Month
FROM dbo.Sales
GROUP BY [Product_ID/No],
[Product_Name])
SELECT *,
(Temp.Current_Month - Temp.Previous_Month) AS Variance
FROM Temp;
我有一项特定任务需要帮助。
基本上我有销售 table:
Product_ID/No Product_Name Date Revenue
A APPLE 01-01-20 50
B BANANA 01-01-20 100
A APPLE 15-12-19 50
B BANANA 15-12-19 150
C CHERRY 15-12-19 50
A APPLE 01-01-20 60
我需要从这个 table 每月创建一个差异报告 (difference/movement),其中 headers:
Product_ID/No Product_Name Current_Month Previous_Month Variance
A Apple 110 50 60
B Banana 100 150 -50
C Cherry 50 -50
问题:
我该怎么做?
这会是一系列 SQL 声明吗?
如有任何建议,我们将不胜感激。
谢谢
您可以按产品分组并使用条件聚合:
SELECT
[Product_ID/No], [Product_Name],
SUM(IIF(DATESERIAL(YEAR(DATE()), MONTH(DATE()), 1) = DATESERIAL(YEAR([Date]), MONTH([Date]), 1), Revenue, NULL)) AS Current_Month,
SUM(IIF(DATESERIAL(YEAR(DATEADD("m", -1, DATE())), MONTH(DATEADD("m", -1, DATE())), 1) = DATESERIAL(YEAR([Date]), MONTH([Date]), 1), Revenue, NULL)) AS Previous_Month,
Nz(Current_Month)- Nz(Previous_Month) AS Variance
FROM Sales
GROUP BY [Product_ID/No], [Product_Name]
结果:
Product_ID/No Product_Name Current_Month Previous_Month Variance
A APPLE 110 50 60
B BANANA 100 150 -50
C CHERRY 50 -50
此查询针对 SQL 服务器:
WITH Temp
AS (SELECT [Product_ID/No],
[Product_Name],
ISNULL(SUM(IIF(DATEPART(MONTH, GETDATE()) = DATEPART(MONTH, [Date]), Revenue, NULL)), 0) AS Current_Month,
ISNULL(SUM(IIF(DATEPART(MONTH, DATEADD(MONTH, -1, GETDATE())) = DATEPART(MONTH, [Date]), Revenue, NULL)), 0) AS Previous_Month
FROM dbo.Sales
GROUP BY [Product_ID/No],
[Product_Name])
SELECT *,
(Temp.Current_Month - Temp.Previous_Month) AS Variance
FROM Temp;