2

你好,来自 StackOverflow 的同事们!

我将简短,切入正题:

我在 Windows XP 上工作,使用 C++,使用 ADO 访问 MS Access 2007 数据库。

我在 MS Access 2007 中有一个表,其中包含 2 个感兴趣的列,标题为 TypeOfObject 和 InstaledPower。

实际的表格如下所示:

   | TypeOfObject | InstaledPower |
   -------------------------------
   |     Type1    |     1000      |
   -------------------------------
   |     Type2    |     2000      |
   -------------------------------
   |     Type3    |      450      |
   -------------------------------
   |     Type4    |      800      |   
   -------------------------------
   |     Type1    |      800      |  
   -------------------------------

我需要一个查询,以这种方式显示该类型的 TypeOfObject 和 sum( InstaledPower ):

如果TypeOfObject 的值为Type1 或Type2,则在表中显示其值不变,否则将其标记为OtherTypes。结果应该是这样的:

   | TypeOfObject | SUM(InstaledPower) |
   -------------------------------------
   |     Type1    |     1800           |  <--- 1000 + 800 = 1800
   -------------------------------------
   |     Type2    |     2000           |  <--- only one Type2, so it is 2000
   -------------------------------------
   |   OtherTypes |     1250           |  <--- sum( InstaledPower ) of Type3 and Type4
   ------------------------------------

我试过这个查询:

   SELECT TypeOfObject , 
   SUM( InstaledPower  ) as [SUM(InstaledPower)] 
   FROM MyTable
   group by TypeOfObject  ;

但我明白了:

   | TypeOfObject | SUM(InstaledPower) |
   -------------------------------------
   |     Type1    |     1800           | <--- correct
   -------------------------------------
   |     Type2    |     2000           |
   -------------------------------------
   |     Type3    |      450           | <--
   -------------------------------------    |-- this isn't what I need, see above
   |     Type4    |      800           | <--  
   -------------------------------------

我曾尝试浏览 SO 档案,发现了类似的东西,但没有任何帮助。

通过互联网搜索,我得出的结论是,这个问题可以用数据透视表解决,但我不知道如何正确使用它们。如果是这样的话,如果数据透视表可以解决这个问题,一些链接会大大增加赞赏。

如果还有什么我可以帮助的,请提出,我会很乐意这样做。

感谢所有试图提供帮助的人。

4

2 回答 2

3
SELECT IIF(TypeOfObject in('Type1', 'Type2'), TypeOfObject, 'OtherTypes') as TypeOfObject , 
       SUM( InstaledPower  ) as [SUM(InstaledPower)] 
       FROM MyTable
 group by IIF(TypeOfObject in('Type1', 'Type2'), TypeOfObject, 'OtherTypes')

;

我不确定这种语法在 Access 2007 中是否有效,一些数据库更喜欢case表达式而不是IIF().

然而,重要的是在 group by 中准确地重复选择列表中的第一个表达式。

于 2013-08-10T01:44:09.240 回答
0
   SELECT TypeOfObject , 
   SUM(IIF(TypeOfObject = 'Type1', InstaledPower, 0)) as [Type1Sum],
   SUM(IIF(TypeOfObject = 'Type2', InstaledPower, 0)) as [Type2Sum],
   SUM(IIF(TypeOfObject <> 'Type2' 
           AND TypeOfObject <> 'Type2', InstaledPower , 0)) as [OtherTypeSum]
   FROM MyTable
   group by TypeOfObject;

[您可能仍需要旋转行。]

于 2013-08-10T01:40:19.237 回答