显示列计数的不同值
Show count of columns distinct values
你好,StackOverflow的同事们!
我将简明扼要:我在MS Access中有一个表,它包含两列感兴趣的内容——县和TGTE(地热能类型)。TGTE列的类型是VARCHAR,它可以有两个值中的一个,为了更容易起见,假设它是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 |
__________________________________
如何创建显示上述所需结果的查询?
注意:我浏览了档案,发现了类似的东西,但对我没有任何帮助。老实说,我不知道如何正确地表达这个问题,所以我想这就是为什么谷歌不能提供太多帮助。。。
我试过这个:
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 |
__________________________________
我使用C++在Windows XP上工作,使用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:
根据Declan的请求,以下是我使用的原始查询:
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查询来做我上面描述的事情呢?
您需要在另外两列中使用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;
我对Deslan的查询进行了如下修改,它有效:
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中工作,也许它不受支持或其他什么。。。
无论如何,感谢Declan为您提供的解决方案。我给你+1。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 显示基于用户输入的整数的字符
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 密码登录程序将永远循环并显示不正确的结果
- std::strftime 在 Windows 中使用 GMTIME 将时区 UTC 显示为 UTC+1