使用带有错误的Union查询访问SQL - INSERT INTO

时间:2018-06-05 15:38:02

标签: sql ms-access

我有一个包含各种性能指标值的表。我有一个动态构建的查询(subQryKPI),它会像这样水平显示这些指标:

| EmployeeID | Sales | Calls | Hours |
--------------------------------------
|   22567    |   4   |   10  |   5   |
|   98321    |   8   |   12  |   6   |
|   24680    |   0   |    0  |   3   |

我有另一个表,其中包含各种KPI的公式:

|       KPI      |       Formula     |
--------------------------------------
| Sales per Call | [Sales] / [Calls] |
| Calls per Hour | [Calls] / [Hours] |

最后,我有一些VBA代码,它构建一个SQL查询来计算每个人的KPI分数,并将它们插入表中(tblKPIdata)。

到目前为止,构建查询的目的是一次计算1个KPI:

INSERT INTO
    tblKPIdata
SELECT
    EmployeeID,
    "Sales per Call" as KPIname,
    [Sales]/[Calls] AS KpiScore
FROM
    SubQryKPI

如果Select查询包含Div / 0错误(例如上面的EmployeeID 24680),这样可以正常工作。它似乎只是过滤出错误,因为它符合我的需要。

我遇到的问题是我正在尝试更新代码以同时计算多个KPI。我试图使用像这样的Union查询来执行此操作:

INSERT INTO
    tblKPIdata
SELECT * FROM (

SELECT
    EmployeeID,
    "Sales per Call" as KPIname,
    [Sales]/[Calls] AS KpiScore
FROM
    SubQryKPI

UNION ALL

SELECT
    EmployeeID,
    "Calls per Hour" as KPIname,
    [Calls]/[Hours] AS KpiScore
FROM
    SubQryKPI)

但似乎如果Union查询中存在Div / 0错误,则无法将其插入另一个表中。 (我不能使用IIf(divisor = 0,0...的旧技巧,因为我永远不知道除数会是什么。

有人知道为什么当它们是Union查询的一部分并且有什么方法可以解决时,不能忽略错误吗?

1 个答案:

答案 0 :(得分:0)

您可以使用splt函数重构查询以识别被除数并控制错误。

Dim LString as a string
Dim LArray () as a string

LString = "[Calls] / [Hours]"
LArray = Split (LString, "/")

MsgBox LArray (0) // [Calls]
MsgBox LArray (1) // [Hours] <------ apply IIF control