Показать количество столбцов различных значений

Здравствуйте, мои коллеги-коллеги из 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.
Если я могу чем-нибудь помочь, спросите, и я с радостью это сделаю.

РЕДАКТИРОВАНИЕ № 1:

После попытки решения Деклана вот что я получаю:

Значения в основной таблице:

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

РЕДАКТИРОВАТЬ № 2:

По запросу Деклана вот оригинальный запрос, который я использую:

   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; ";

РЕДАКТИРОВАТЬ № 3:

После того, как я скопировал приведенный выше запрос в Access и запустил его, все работает нормально, поэтому я считаю, что проблема заключается в использовании ADO.

РЕДАКТИРОВАТЬ № 4:

После просмотра Интернета я уверен, что проблема в ADO.
Как я могу использовать IIF () в ADO, чтобы мой запрос мог работать?
Если это не может быть сделано, то как изменить y-запрос, чтобы сделать то, что я описал выше?

0

Решение

Вам необходимо использовать функцию 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;
1

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

Я переработал запрос Деслана, как показано ниже, и он работает:

   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 от меня.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector