如何在Access中使用SQL从同一列中获取三个计数值?

如何在Access中使用SQL从同一列中获取三个计数值?,sql,ms-access,count,subquery,Sql,Ms Access,Count,Subquery,我有一个表,它有一个整数列,我试图从中获取一些计数。基本上,我需要从同一列中分离出四个计数。我需要返回的第一个值是,有多少记录的整数值存储在此列中,介于两个值(例如213和9999)之间,包括最小值和最大值。我需要返回的其他三个计数值只是此列不同值之间的记录计数。我试过做一些查询,比如 SELECT (SELECT Count(ID) FROM view1 WHERE ((MyIntColumn BETWEEN 213 AND 9999));) AS Value1, (SELECT Count(

我有一个表,它有一个整数列,我试图从中获取一些计数。基本上,我需要从同一列中分离出四个计数。我需要返回的第一个值是,有多少记录的整数值存储在此列中,介于两个值(例如213和9999)之间,包括最小值和最大值。我需要返回的其他三个计数值只是此列不同值之间的记录计数。我试过做一些查询,比如

SELECT (SELECT Count(ID) FROM view1 WHERE ((MyIntColumn BETWEEN 213 AND 9999));)
AS Value1, (SELECT Count(ID) FROM FROM view1 WHERE ((MyIntColumn BETWEEN 500 AND 600));) AS Value2 FROM view1; 
例如,有十条记录的列值在213到9999之间。从这个查询返回的结果给了我10,但它给了我相同的值10618倍,这是表中的总记录数。我怎么可能只让它返回一条10的记录呢?

SELECT
SELECT
COUNT(CASE 
     WHEN MyIntColumn >= 213 AND MyIntColumn <= 9999 
     THEN MyIntColumn 
     ELSE NULL 
     END) AS FirstValue
, ??? AS SecondValue
, ??? AS ThirdValue
, ??? AS FourthValue
FROM Table
计数(大小写) 当MyIntColumn>=213且MyIntColumn
选择
计数(大小写)

当MyIntColumn>=213且MyIntColumn重新格式化时,您的查询如下所示:

SELECT  (
        SELECT  Count(ID) 
        FROM    view1 
        WHERE   MyIntColumn BETWEEN 213 AND 9999
        ) AS Value1 
FROM    view1; 
因此,您选择的子查询表达式与外部查询无关。对于
view1
中的每一行,您计算
view1
中的行数

相反,请尝试执行一次计算。您只需删除外部查询:

SELECT  Count(ID) 
FROM    view1 
WHERE   MyIntColumn BETWEEN 213 AND 9999;

重新格式化后,您的查询如下所示:

SELECT  (
        SELECT  Count(ID) 
        FROM    view1 
        WHERE   MyIntColumn BETWEEN 213 AND 9999
        ) AS Value1 
FROM    view1; 
因此,您选择的子查询表达式与外部查询无关。对于
view1
中的每一行,您计算
view1
中的行数

相反,请尝试执行一次计算。您只需删除外部查询:

SELECT  Count(ID) 
FROM    view1 
WHERE   MyIntColumn BETWEEN 213 AND 9999;
在下列情况下,使用Iif()函数而不是CASE

     select  Condition1: iif( ),   condition2: iif(  ),  etc
注意:我在使用Access时通常做的是将iif()解析为1或0,然后执行SUM()以获取计数。迂回,但它在使用聚合时效果更好,因为它避免了null。

使用iif()函数,而不是在

     select  Condition1: iif( ),   condition2: iif(  ),  etc

注意:我在使用Access时通常做的是将iif()解析为1或0,然后进行求和()以获得计数。迂回,但由于避免了空值,因此聚合更有效。

MS Access中的OLEDB连接不支持关键字大小写和时间

只能使用iif()函数对同一列中的两个、三个..值进行计数

SELECT Attendance.StudentName, Count(IIf([Attendance]![Yes_No]='Yes',1,Null)) AS Yes, Count(IIf([Attendance]![Yes_No]='No',1,Null)) AS [No], Count(IIf([Attendance]![Yes_No]='Not',1,Null)) AS [Not], Count(IIf([Attendance]![Yes_No],1,Null)) AS Total
出席人数
按出勤率分组。MS Access中的StudentName;

OLEDB连接不支持关键字大小写和时间

只能使用iif()函数对同一列中的两个、三个..值进行计数

SELECT Attendance.StudentName, Count(IIf([Attendance]![Yes_No]='Yes',1,Null)) AS Yes, Count(IIf([Attendance]![Yes_No]='No',1,Null)) AS [No], Count(IIf([Attendance]![Yes_No]='Not',1,Null)) AS [Not], Count(IIf([Attendance]![Yes_No],1,Null)) AS Total
出席人数
按出勤率分组。StudentName;

我需要返回的其他三个计数值只是此列不同值之间的记录计数
。请更清楚地说明此要求。我已重新编辑查询,以显示它只是第一个子查询的重复,但根据整数值获得不同的计数提供用于在之间搜索。
我需要返回的其他三个计数值只是此列不同值之间的记录计数
。请更清楚地说明此要求。我已重新编辑查询,以显示它只是第一个子查询的重复,但根据提供的整数值获得不同的计数在之间搜索。你能在ACCESS SQL中重复此操作吗?ACCESS似乎不允许我使用CASE WHEN。你能在ACCESS SQL中重复此操作吗?ACCESS似乎不允许我使用CASE WHEN。因此,如果我要写入选择计数(IIF(MyIntColumn>=213和MyIntColumn),请参阅我的P.S.以了解执行此操作的方法。因此,如果我要写入选择计数(IIF(MyIntColumn>=213和MyIntColumn请参阅我的P.S.以了解执行此操作的方法。