【问题标题】:Show count of columns distinct values显示不同值的列数
【发布时间】: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++ 应用程序。
  • 您可能想查看此博客站点。 blogs.office.com/b/microsoft-access/archive/2007/09/19/…

标签: c++ sql ms-access ado


【解决方案1】:

您需要在另外两个列中使用 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;

【讨论】:

  • 谢谢德克兰,你能提供一些语法链接吗?这将是我第一次使用它。我也会浏览谷歌来尝试找到一个例子。我希望它适用于 MS Access...谢谢。
  • 使用 Access Query Designer 中的“函数生成器”,您会在此处找到 SUM 和 IIF 函数。
  • Declan,我快到了...我会更新我的问题,因为它最能说明我当前的问题。
  • 它工作正常,当我在 Access 中进行查询时!问题一定是在填写列表视图之类的......
  • Declan,当我使用 ADO 时,你知道为什么这个查询在 C++ 中不起作用吗?
【解决方案2】:

我已经修改了 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。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    相关资源
    最近更新 更多