【问题标题】:Select multiple counts from one database table in one sql command access在一个 sql 命令访问中从一个数据库表中选择多个计数
【发布时间】:2013-06-25 09:11:13
【问题描述】:

我有一个格式如下的表:

STATE SURVEY_ANSWER  
NC high  
NC moderate  
WA high  
FL low  
NC high

我正在寻找可以得到以下结果的单个查询:

STATE HIGH MODERATE LOW 
NC 2 1 0  
WA 1 0 0  
FL 0 0 1

不幸的是,这些是我得到的结果:

STATE HIGH MODERATE LOW 
NC 3 1 1  
WA 3 1 1  
FL 3 1 1  

这是我正在使用的代码:

Select mytable.STATE,
(SELECT COUNT(*) FROM mytable WHERE mytable.survey_answer = 'low' and state = mytable.state) AS low,
(SELECT COUNT(*) FROM mytable WHERE mytable.survey_answer = 'moderate' and state = mytable.state) AS moderate,
(SELECT COUNT(*) FROM mytable WHERE mytable.survey_answer = 'high' and state = mytable.state) AS high,
FROM mytable
GROUP BY mytable.state;

虽然这个论坛和其他论坛非常有帮助,但我无法弄清楚我做错了什么。请注意:我使用的是 Access,因此 CASE WHEN 解决方案不起作用。谢谢你的建议。

【问题讨论】:

    标签: sql ms-access select


    【解决方案1】:

    看起来这可能是由于未使用表别名引起的问题。因为您在外部SELECT 正在使用的同一个表上进行子查询,并且没有给外部表一个别名,所以子查询的WHERE 中的两个条件都只使用子查询中的数据查询。

    换句话说,当你写:

    SELECT COUNT(*) FROM mytable WHERE mytable.survey_answer = 'low' and state = mytable.state
    

    它对外部查询一无所知。

    试试这个:

    SELECT t1.STATE,
      (SELECT COUNT(*) FROM mytable t2 WHERE t2.state = t1.state AND t2.survey_answer = 'low') low,
      (SELECT COUNT(*) FROM mytable t3 WHERE t3.state = t1.state AND t3.survey_answer = 'moderate') moderate,
      (SELECT COUNT(*) FROM mytable t4 WHERE t4.state = t1.state AND t4.survey_answer = 'high') high,
    FROM mytable t1
    GROUP BY t1.state
    

    【讨论】:

    • 太好了,感谢您的帮助。这个解决方案非常适合我。
    【解决方案2】:

    Aiias 回答解释了为什么您当前的查询不起作用,但我想我会指出您认为您不能使用 CASE WHEN 解决方案的假设只是部分正确,是的,您不能使用 CASE WHEN 但是这并不意味着您需要相关的子查询。你可以简单地使用:

    SELECT  mytable.STATE,
            SUM(IIF(mytable.survey_answer = 'low', 1, 0) AS low,
            SUM(IIF(mytable.survey_answer = 'moderate', 1, 0) AS moderate,
            SUM(IIF(mytable.survey_answer = 'high', 1, 0) AS high
    FROM    mytable
    GROUP BY mytable.state;
    

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 2012-12-22
      • 2017-11-04
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      相关资源
      最近更新 更多