Проблема с отображением значения SUM () столбца

Здравствуйте, мои коллеги-коллеги из 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 и сумму (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 архив, и нашел похожие вещи, но ничего не помогло мне.

Выполняя поиск в Интернете, я пришел к выводу, что эту проблему можно решить с помощью сводных таблиц, но я не знаю, как их правильно использовать. Если это так, если сводная таблица может решить эту проблему, некоторые ссылки будут очень оценили.

Если я могу чем-нибудь помочь, спросите, и я с радостью это сделаю.

Спасибо всем, кто пытается помочь.

2

Решение

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

Важно, однако, повторить первое выражение в списке выбора точно в группе с помощью.

3

Другие решения

   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;
[Возможно, вам все еще нужно поворачивать строки.]
0

По вопросам рекламы [email protected]