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/