Доступ к SQL - INSERT INTO с помощью запроса объединения с ошибками - PullRequest
0 голосов
/ 05 июня 2018

У меня есть таблица, которая содержит различные значения метрики производительности.У меня есть запрос (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..., так как никогда не знаю, каким будет делитель.

Кто-нибудь знает, почему ошибки нельзя игнорировать таким же образом, когда они являются частью Союза?запрос и есть ли способ обойти это?

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете реструктурировать свой запрос, используя функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...