在一个sql命令访问中从一个数据库表中选择多个计数

use*_*187 5 sql ms-access select

我有一个以下格式的表格:

STATE SURVEY_ANSWER  
NC high  
NC moderate  
WA high  
FL low  
NC high
Run Code Online (Sandbox Code Playgroud)

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

STATE HIGH MODERATE LOW 
NC 2 1 0  
WA 1 0 0  
FL 0 0 1
Run Code Online (Sandbox Code Playgroud)

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

STATE HIGH MODERATE LOW 
NC 3 1 1  
WA 3 1 1  
FL 3 1 1  
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

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;
Run Code Online (Sandbox Code Playgroud)

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

Aii*_*ias 5

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

换句话说,当你写:

SELECT COUNT(*) FROM mytable WHERE mytable.survey_answer = 'low' and state = mytable.state
Run Code Online (Sandbox Code Playgroud)

它对外部查询一无所知。

尝试这个:

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
Run Code Online (Sandbox Code Playgroud)