c++ - 显示列的 SUM() 值时出现问题

标签 c++ sql ms-access-2007 ado

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 存档,发现了类似的东西,但没有任何帮助。

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

如果还有什么我可以帮忙的,请询问,我很乐意帮忙。

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

最佳答案

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()

但是,在分组依据中准确地重复选择列表中的第一个表达式非常重要。

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

相关文章:

php - 如何在谷歌云sql实例上创建数据库

java - 数据的数据库结构

sql - 无法更改 SQL Server 2008 中的表设计

c++ - 用户注销/登录后创建托盘图标时出现罕见错误

c++ - 使用 C++ 的 Win32/MFC 命名约定

c++ - 不能重载 "<<"运算符

java - 如何使用 Jackcess 删除 (DROP) Access 表

c++ - C++将类方法作为函数指针传递

sql - 通过 ADO 称为存储过程的访问查询无法从链接表中检索

sql - accdb 与 mdb Access 数据库文件