2011-07-12 3 views
1

У меня возникли некоторые проблемы получения запроса работать в MS Access 2007. Я следующий запрос, который работает отлично:Проблемы, связанные с запросом, используя Having пункт в Access

SELECT boq.PIPE_AG, 
     boq.PIPE_UG, 
     boq.Pipe, 
     boq.Unit, 
     SUM(boq.Quantity) AS SumOfQuantity 
    FROM [Total - BOQ] boq 
GROUP BY boq.PIPE_AG, boq.PIPE_UG, boq.Pipe, boq.Unit 
    HAVING boq.PIPE_AG In (-1,1) OR boq.PIPE_UG In (-1,1); 

Когда я добавляю boq.Pipe = '1' к HAVING caluse, как это:

HAVING boq.Pipe ='1' AND (boq.PIPE_AG In (-1,1) OR boq.PIPE_UG In (-1,1)) 

я получаю ошибку, которая говорит:

Вы попытались выполнить запрос, который не включает указанное выражение 'boq.Pipe =' 1 'And (boq.PIPE_AG In (-1,1) Или boq.PIPE_UG In (-1,1))' как часть совокупная функция.

Я немного недоумеваю, почему он жалуется. У меня есть все три записи в предложении GROUP BY моего запроса. Запрос работает нормально, если я его изменил, чтобы использовать предложение WHERE, но я пытаюсь понять, почему он жалуется, когда я добавляю поле Pipe в пункт HAVING.

+4

Используйте предложение WHERE вместо HAVING. Вы должны использовать HAVING только с агрегатными функциями. Например, вы можете использовать HAVING Sum (boq.Quantity)> 1000, который должен это сделать. – THEn

+0

@THEn: Должен быть ответ - я бы поднял, если вы разместите его как один –

+0

Я знаю, что он будет работать, используя где, я просто пытаюсь понять, почему добавление pipe = 1 заставляет его терпеть неудачу. Pipe_ag и pipe_ug также не являются агрегатными функциями. – xecaps12

ответ

3

Какую версию MS Access вы используете? Я только что воспроизвел вашу точную таблицу/запрос в моей копии Access 2007 и работал отлично (как и ожидалось). Я предположил, что все ваши столбцы имеют столбцы типа Number (long) и столбцы Pipe для текста

+0

Access 2007, а таблица 'total-boq' на самом деле является запросом, но типы данных таковы, что вы упоминается. – xecaps12

+0

Он работает, когда я делаю таблицу из моего запроса. Не уверен, что это говорит мне, но это шаг вперед, я думаю. – xecaps12

+2

Извините, чувак. Он работает либо в таблице, либо в запросе в моем доступе. Попробуйте повторно создать запрос. –

5

Используйте предложение WHERE вместо HAVING. Вы должны использовать HAVING только с агрегатными функциями. Например, вы могли бы использовать

HAVING Sum(boq.Quantity) > 1000 

, который должен сделать это

+1

Я предполагаю, что вы имели в виду, что _HAVING может использоваться с GROUP BY_ (а не только для агрегатных функций). Можно использовать HAVING для группировки по столбцам –

+0

@iturman: можно также использовать 'HAVING' без' GROUP BY';) – onedaywhen

Смежные вопросы