您好,我来自StackOverflow的同事们!

我会简短地讲到重点:

我使用C++在Windows XP上使用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归档文件,发现类似的内容,但是没有任何帮助。

通过Internet搜索得出的结论是,数据透视表可以解决此问题,但我不知道如何正确使用它们,如果是这样的话,如果数据透视表可以解决此问题,那么某些链接将非常有用赞赏。

如果我还有其他可以帮助的事情,请询问,我会很乐意这样做。

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

最佳答案

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中重复选择列表中的第一个表达式。

关于c++ - 无法显示列的SUM()值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18157852/

10-16 05:10