MS SQL-запрос в Access через ODBC, соединяющийся с SQL Server - PullRequest
0 голосов
/ 24 мая 2019

Из-за некоторых ограничений (которые я не буду здесь вдаваться) ... наша архитектура использует запросы в Access, выполняемые через драйвер ODBC SQL Server.

Следующий запрос выдает 2 ошибки:

SELECT Tbl2.columnid, 
       Tbl2.label, 
       Tbl2.group1, 
       Tbl2.group2, 
       Count(Tbl2.columnid) AS Total 
FROM   (SELECT scanned AS Group1, 
               false   AS Group2, 
               scanned AS Label, 
               scanned AS ColumnID 
        FROM   (SELECT *, 
                       ( quantity - productqty ) AS Variance 
                FROM   order_line 
                WHERE  processed = false) AS Tbl1 
        WHERE   wsid = 1 ) AS Tbl2 
WHERE  Tbl2.columnid = false 
GROUP  BY Tbl2.group1, 
          Tbl2.group2, 
          Tbl2.columnid, 
          Tbl2.label 
ORDER  BY Tbl2.group1 DESC, 
          Tbl2.group2 

Errors in Group and Order By clauses

Ошибка 1: Каждое выражение GROUP BY должно содержать хотя бы один столбец, являющийся внешней ссылкой: (# 164) Ошибка 2: Номер позиции ORDER BY 0 находится вне диапазона количества элементов в списке выбора (# 108)

Важно отметить, что «отсканированное» - это поле BIT в SQL Server (и, следовательно, Group1, Label, ColumnId также являются битами). Я считаю, что именно поэтому GROUP BY и ORDER BY рассматривают его как константу (значение = 0), что приводит к этим ошибкам.

Но я не знаю, как решить эти проблемы. Любые предложения будут великолепны!

PS - причина, по которой используются 2 подзапроса, связана с другими ограничениями, в которых мы пытаемся получить идентификатор, метку, счет для столбца в канбан.

1 Ответ

0 голосов
/ 24 мая 2019

На основании комментариев и предложений DRapp .. следующие работы:

SELECT Tbl2.columnid, 
       Tbl2.label, 
       Tbl2.group1, 
       Tbl2.group2, 
       Count(Tbl2.columnid) AS Total 
FROM   (SELECT IIf(scanned=True, 'Y', 'N') AS Group1, 
               'N'   AS Group2, 
               IIf(scanned=True, 'Y', 'N') AS Label, 
               IIf(scanned=True, 'Y', 'N') AS ColumnID 
        FROM   (SELECT *, 
                       ( quantity - productqty ) AS Variance 
                FROM   order_line 
                WHERE  processed = false) AS Tbl1 
        WHERE   wsid = 1 ) AS Tbl2 
WHERE  Tbl2.columnid = 'N' 
GROUP  BY Tbl2.group1, 
          Tbl2.group2, 
          Tbl2.columnid, 
          Tbl2.label 
ORDER  BY Tbl2.group1 DESC, 
          Tbl2.group2 

Не идеально (поскольку первый подзапрос генерируется динамически, и теперь требуется дополнительная обработка, если поле группы битовое. Но работает! Все еще открыто для любых других решений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...