【发布时间】:2013-08-07 22:45:26
【问题描述】:
您好,来自 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:
在尝试了 Declan 的解决方案后,我得到了这样的结果:
主表中的值:
| 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。 如何在 ADO 中使用 IIF() 以便我的查询可以工作? 如果无法完成,那么如何修改 y 查询以执行我上面描述的操作?
【问题讨论】:
-
你试过使用 count (distinct TGTE) 吗?
-
是的,但似乎 Access 不支持它。我在这里找到了几篇关于该主题的文章。
-
请发布您正在使用的 SQL 语句。此外,您可能希望在 Access DB 中的 QUERY 中执行所有这些操作,然后通过调用该 QUERY 对象将数据检索到您的 C++ 应用程序。