Неожиданный токен: символ «меньше» в запросе SQL - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь использовать ADODB в макросе Excel для извлечения данных из таблицы DB2 с помощью запроса SQL. Я столкнулся с ошибкой, вызванной выражением в запросе. Соответствующий код приведен ниже - проблема исходит из оператора IIF в первой строке . (Другие SQL запросы в рамках проекта, над которым я работаю, были выполнены без каких-либо проблем.)

SQL_input = SQL_input & "SELECT DB2.TABLE1.CAT, DB2.TABLE1.BRD, DB2.TABLE1.ITEM, Sum(IIF(ITEM_ORD_Q-ITEM_RECV_Q < 0,0,ITEM_ORD_Q-ITEM_RECV_Q)) AS OO" & vbCrLf
SQL_input = SQL_input & "FROM DB2.TABLE2 INNER JOIN DB2.TABLE ON (DB2.TABLE2.ITEM = DB2.TABLE1.ITEM) AND (DB2.TABLE2.BRD = DB2.TABLE1.BRD) AND (DB2.TABLE2.CAT = DB2.TABLE1.CAT)" & vbCrLf
SQL_input = SQL_input & "WHERE (((DB2.TABLE2.ITEM_GRP_CAT)=" & cat & ") AND ((DB2.TABLE2.ITEM_GRP_code_C)='" & code & "'))" & vbCrLf
SQL_input = SQL_input & "GROUP BY DB2.TABLE1.CAT, DB2.TABLE1.BRD, DB2.TABLE1.ITEM;"

AdoRS1.Open (SQL_input)

Я получаю сообщение об ошибке: SQL0104N Неожиданный токен «<» был найдено после "" </em>

Кто-нибудь знает, как я могу изменить строку для запроса, чтобы он работал?

Спасибо !!

1 Ответ

1 голос
/ 07 мая 2020

AFAIK - DB2 не поддерживает IIF, который является методом MS Access и SQL Server (2012+). Рассмотрим ANSI SQL аналог CASE, доступный почти во всех SQL диалектах:

SUM(CASE 
        WHEN ITEM_ORD_Q-ITEM_RECV_Q < 0
        THEN 0
        ELSE ITEM_ORD_Q-ITEM_RECV_Q
    END) AS OO
...