【发布时间】:2018-02-28 20:48:40
【问题描述】:
我创建了一个UNION ALL 来加入销售数据的客户“同比”总计。当前月份和年份从用户那里获取并传递给查询,我得到客户列,今年销售额 (CY) 和去年销售额 (PY)。这一切都有效。
现在我想添加一个计算出的差异列。这是我在SELECT 语句中显示表达式的代码:
SELECT
IIF(CY.Cust <> "", CY.Cust, PY.Cust) AS Cust,
CY.CurSales AS CurSales,
PY.PriSales AS PriSales,
PY.PriSales - CY.CurSales AS Diff
FROM
(SELECT
[Unique] AS Cust,
SUM(Amount) AS CurSales
FROM
Sales_Data
WHERE
(Month <= Forms!SalesInput!MonthNum AND
[Sales_Data]![Year] = Forms!SalesInput!Year)
GROUP BY
[Unique]
) AS CY
LEFT OUTER JOIN
(SELECT
[Unique] AS Cust,
SUM(Amount) AS PriSales
FROM
Sales_Data
WHERE
(Month <= Forms!SalesInput!MonthNum AND
[Sales_Data]![Year] = Forms!SalesInput!Year-1)
GROUP BY
[Unique]
) AS PY
ON (CY.Cust = PY.Cust)
UNION ALL
SELECT
IIF(CY.Cust <> "", CY.Cust, PY.Cust) AS Cust,
CY.CurSales AS CurSales,
PY.PriSales AS PriSales,
PY.PriSales - CY.CurSales AS Diff
FROM
(SELECT
[Unique] AS Cust,
SUM(Amount) AS CurSales
FROM
Sales_Data
WHERE
(Month <= Forms!SalesInput!MonthNum AND
[Sales_Data]![Year] = Forms!SalesInput!Year)
GROUP BY
[Unique]
) AS CY
RIGHT OUTER JOIN
(SELECT
[Unique] AS Cust,
SUM(Amount) AS PriSales
FROM
Sales_Data
WHERE
(Month <= Forms!SalesInput!MonthNum AND
[Sales_Data]![Year] = Forms!SalesInput!Year-1)
GROUP BY
[Unique]
) AS PY
ON (CY.Cust = PY.Cust)
WHERE
(CY.Cust IS NULL AND PY.Cust IS NOT NULL);
除非PY.PriSales = 0 或CY.CurSales = 0,否则此方法有效。如果任一结果为空白/空/零,我不会从我的表达式中得到结果。我在这里寻找解决方案没有运气。谁能指出我错过了什么?我觉得它必须非常简单。
【问题讨论】: