显示列计数的不同值

Show count of columns distinct values

本文关键字:显示      更新时间:2023-10-16

你好,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。