首页 > 解决方案 > 访问 sql 以检索满足条件的值的计数

问题描述

我正在尝试在 Access 中编写一个查询,该查询将返回表中每个站点的值计数,其中值超过指定级别,而且对于没有超过该级别的值的站点,返回指定值,例如作为"NA".

我试过Iif, Switch, Union, 子查询,查询不同的查询,但没有运气。我可以获得超过该级别的所有计数,或者所有"NA"正确但显示其余站点的总计数的站点,而不仅仅是高于该级别的计数。

例如,在下表中,假设 level > 10,Houston = "NA",Detroit = 2,Pittsburgh PA = 3。我只是无法让查询的双方都工作。

提前为糟糕的格式道歉。

+-----------------+-------+
|     1. Site     | Value |
+-----------------+-------+
|  2. Houston     |    10 |
|  3. Houston     |     3 |
|  4. Houston     |     0 |
|  5. Detroit     |    15 |
|  6. Detroit     |     7 |
|  7. Detroit     |     4 |
|  8. Detroit     |    12 |
|  9. Pittsburgh  |    23 |
|  10. Pittsburgh |     2 |
|  11. Pittsburgh |    18 |
|  12. Pittsburgh |    12 |
+-----------------+-------+

标签: sqlms-accesscount

解决方案


  1. 获取与计数无关的所有站点的列表(下面的 SiteList 派生表)
  2. LEFT 将此连接回您的基表 (SiteValues) 以获取每个达到阈值的站点的计数。--note 应该加入我不确定该表是什么的键。仅网站是不够的
  3. 将 siteValues 数据集中的值计算为 NULL 将被计为 0。

工作演示:。

SELECT SiteList.Site, Count(Sitevalues.Site)
FROM (SELECT site, value
      FROM TableName) SiteList
LEFT JOIN TableName SiteValues
 on SiteList.Site = SiteValues.Site
 and SiteValues.Value > 10
 and SiteValues.Value = SiteList.value
GROUP BY SiteList.Site

给我们:

+----+------------+------------------+
|    |    Site    | (No column name) |
+----+------------+------------------+
|  1 | Detroit    |                2 |
|  2 | Houston    |                0 |
|  3 | Pittsburgh |                3 |
+----+------------+------------------+

或者,如果您需要 NA,则必须将计数转换为 varchar

SELECT SiteList.Site, case when Count(Sitevalues.Site) = 0 then 'NA' else cast(count(Sitevalues.site) as varchar(10)) end as SitesMeetingThreshold
FROM (SELECT site, value
      FROM TableName) SiteList
LEFT JOIN TableName SiteValues
 on SiteList.Site = SiteValues.Site
 and SiteValues.Value > 10
 and SiteValues.Value = SiteList.value
GROUP BY SiteList.Site

推荐阅读