Access 2010 SQL - Group By / Order By conflict

时间:2011-02-03 21:09:31

标签: sql ms-access

我有两个几乎相同的查询在两个不同的表中基本相同的字段上运行。有效的第一个查询如下所示:

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 个答案:

答案 0 :(得分:3)

正如您所说,查询基本相同,因此问题必然是由表结构或表数据的差异引起的。对于有问题的字段,它们看起来是相同的数据类型(因为您将它们都与同一组字符串进行比较),所以我猜测问题在于数据本身。

如果我不得不猜测我会说d20110126.BCSegment字段中的数据不等于'Residential','Commercial','Health','Religious','Other'或'Government'。如果是这种情况,则Switch语句将返回该特定记录的Null

修复将是:

  1. 清理您的数据(通过其他方式确保所有记录中包含您要检查的五个值之一)
  2. Switch语句中添加默认的“Else”(例如True, 6),以便switch语句始终返回值。