Здравствуйте, мои коллеги-коллеги из StackOverflow!
Я буду кратким и сокращен до сути:
У меня есть таблица в MS Access, она содержит 2 столбца интереса — округ и TGTE (тип геотермальной энергии). Столбец TGTE имеет тип VARCHAR и может иметь 1 из двух значений, чтобы упростить его, скажем, это либо L, либо H.
Мне нужно создать запрос SQL, который показывает результат, который описан ниже:
Сильфон является частью таблицы:
County | TGTE | ... |
First | L |
First | L |
First | H |
Second | H |
Third | L |
__________________
Мне нужен результирующий запрос, который показывает количество различных TGTE в каждом округе, например:
County | TGTE = L | TGTE = H |
First | 2 | 1 |
Second | 0 | 1 |
Third | 1 | 0 |
__________________________________
Как я могу создать запрос, который отображает желаемый результат, описанный выше?
НОТА:
Я просмотрел архив и нашел похожие вещи, но мне ничего не помогло.
Если честно, я не знаю, как правильно сформулировать вопрос, поэтому я думаю, именно поэтому Google не мог оказать большую помощь …
Я пытался с этим:
SELECT County, COUNT(TGTE) as [Something]
FROM MyTable
WHERE TGTE = "L"GROUPBY COUNTY;
но вот результат, который я получаю:
County | TGTE = L |
First | 2 |
Second | 0 |
Third | 1 |
__________________________________
Если я изменю L на H, в запросе выше я получу это:
County | TGTE = H |
First | 1 |
Second | 1 |
Third | 0 |
__________________________________
Я работаю на Windows XP, в C ++, используя ADO для доступа к базе данных MS Access 2007.
Если я могу чем-нибудь помочь, спросите, и я с радостью это сделаю.
После попытки решения Деклана вот что я получаю:
Значения в основной таблице:
| County | TGTE |
| Стари Град | H |
| Сурчин | L |
| Стари Град | H |
| Савски Венац | H |
| Раковица | H |
Выход :
| County | TGTE = L | TGTE = H |
| Раковица | 1 | 1 |
| Савски Венац | 1 | 0 |
| Сурчин | 1 | 0 |
| Стари Град | 1 | 0 |
Это должно вывести это:
| County | TGTE = L | TGTE = H |
| Раковица | 1 | 0 |
| Савски Венац | 1 | 0 |
| Сурчин | 0 | 1 |
| Стари Град | 2 | 0 |
По запросу Деклана вот оригинальный запрос, который я использую:
wchar_t *query = L"select Општина, \
sum( iif( Тип_геотермалне_енергије =
'Хидрогеотермална енергија', 1, 0 ) ) as [HGTE], \
sum( iif( Тип_геотермалне_енергије =
'Литогеотермална енергија', 1, 0 ) ) as [LGTE] \
from Објекат \
group by Општина; ";
В переводе на наш пример это выглядит так:
wchar_t *query = L"select County, \
sum( iif( TGTE = 'H', 1, 0 ) ) as [HGTE], \
sum( iif( TGTE = 'L', 1, 0 ) ) as [LGTE] \
from MyTable \
group by County; ";
После того, как я скопировал приведенный выше запрос в Access и запустил его, все работает нормально, поэтому я считаю, что проблема заключается в использовании ADO.
После просмотра Интернета я уверен, что проблема в ADO.
Как я могу использовать IIF () в ADO, чтобы мой запрос мог работать?
Если это не может быть сделано, то как изменить y-запрос, чтобы сделать то, что я описал выше?
Вам необходимо использовать функцию iif в двух дополнительных столбцах. Вот некоторый псевдокод, чтобы вы начали.
SELECT County
,sum(iif(TGTE = "L",1,0)) as [L_Count]
,sum(iif(TGTE = "H",1,0)) as [H_Count]
FROM MyTable
GROUP BY
COUNTY;
Я переработал запрос Деслана, как показано ниже, и он работает:
SELECT County
,sum( switch( ТGTE = 'L', 1, TGTE = 'H', 0 ) ) as [L_Count]
,sum( switch( ТGTE = 'H', 1, TGTE = 'L', 0 ) ) as [H_Count]
FROM MyTable
GROUP BY
County;
Все работает нормально, когда я запускаю его через ADO и MS Access 2007.
Я не понимаю, почему IIF () не работает в ADO, может быть, он не поддерживается или что-то …
В любом случае, спасибо вам, Деклан, за ваше решение. У вас +1 от меня.