Access 2010 SQL - группировка по / заказ по конфликту - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть два почти идентичных запроса, работающих по существу с одинаковыми полями в двух разных таблицах. Первый запрос, который работает, выглядит следующим образом:

TRANSFORM Count(PA_20110126.Account) AS CountOfAccount
SELECT PA_20110126.BuildingSegment, PA_20110126.BuildingGroup
FROM PA_20110126
GROUP BY PA_20110126.BuildingSegment, PA_20110126.BuildingGroup
ORDER BY 
   Switch([PA_20110126].[BuildingSegment]='Residential',0,
    [PA_20110126].[BuildingSegment]='Commercial',1,
    [PA_20110126].[BuildingSegment]='Health',2,
    [PA_20110126].[BuildingSegment]='Religious',3,
    [PA_20110126].[BuildingSegment]='Other',4,
    [PA_20110126].[BuildingSegment]='Government',5),
   PA_20110126.BuildingGroup
PIVOT PA_20110126.[PA Status] In ('CURRENT ', 'DEFAULT ',
  'SATISFIED ', 'NOT SATISFIED ');

Второй запрос ниже останавливается сообщением об ошибке, в котором говорится, что предложение ORDER BY конфликтует с предложением GROUP BY.

TRANSFORM Count(d20110126.Account) AS CountOfAccount
SELECT d20110126.BCSegment, d20110126.BCGroup
FROM d20110126
GROUP BY d20110126.BCSegment, d20110126.BCGroup
ORDER BY 
   Switch([d20110126].[BCSegment]='Residential',0,
    [d20110126].[BCSegment]='Commercial',1,
    [d20110126].[BCSegment]='Health',2,
    [d20110126].[BCSegment]='Religious',3,
    [d20110126].[BCSegment]='Other',4,
    [d20110126].[BCSegment]='Government',5),
   d20110126.BCGroup
PIVOT d20110126.Borough;

Что вызывает ошибку конфликта во втором запросе?

Спасибо!

1 Ответ

3 голосов
/ 04 февраля 2011

Как вы сказали, запросы в основном идентичны, поэтому проблема должна быть вызвана различиями либо в структуре таблицы, либо в данных таблицы. Для рассматриваемых полей они выглядят как один и тот же тип данных (поскольку вы сравниваете их оба с одним и тем же набором строк), поэтому я предполагаю, что проблема связана с самими данными.

Если бы мне пришлось угадывать, я бы сказал, что в поле d20110126.BCSegment есть данные, которые не равны «Жилой», «Коммерческий», «Здравоохранение», «Религиозный», «Другой» или «Государственный». Если это так, то оператор Switch вернет Null для этой конкретной записи.

Исправление было бы либо:

  1. очистить ваши данные (с помощью других средств, чтобы все записи имели одно из пяти значений, с которыми вы проверяете)
  2. добавьте значение Else по умолчанию к вашему оператору Switch (например, True, 6), чтобы оператор switch всегда возвращал значение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...