Здравствуйте, мои коллеги-коллеги из 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 архив, и нашел похожие вещи, но ничего не помогло мне.
Выполняя поиск в Интернете, я пришел к выводу, что эту проблему можно решить с помощью сводных таблиц, но я не знаю, как их правильно использовать. Если это так, если сводная таблица может решить эту проблему, некоторые ссылки будут очень оценили.
Если я могу чем-нибудь помочь, спросите, и я с радостью это сделаю.
Спасибо всем, кто пытается помочь.
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()
,
Важно, однако, повторить первое выражение в списке выбора точно в группе с помощью.
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;
[Возможно, вам все еще нужно поворачивать строки.]