我有一个包含整数列的表,我试图从中获取一些计数。基本上我需要来自同一列的四个单独的计数。我需要返回的第一个值是在两列值(如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,但它给了我相同的值10,618次,这是总记录的数量桌子。我怎么可能只返回一个10的记录呢?
答案 0 :(得分:2)
SELECT
COUNT(CASE
WHEN MyIntColumn >= 213 AND MyIntColumn <= 9999
THEN MyIntColumn
ELSE NULL
END) AS FirstValue
, ??? AS SecondValue
, ??? AS ThirdValue
, ??? AS FourthValue
FROM Table
这不需要嵌套或CTE或任何东西。只需通过CASE定义COUNTs参数中的条件。
我真的不明白你想要的第二,第三和第四列。对我而言,它与第一个非常相似。
答案 1 :(得分:2)
使用Iif()函数代替CASE WHEN
select Condition1: iif( ), condition2: iif( ), etc
P.S。 :使用Access时我常常做的是将iif()解析为1或0,然后执行SUM()以获取计数。 Roundabout但它在聚合方面效果更好,因为它避免了空值。
答案 2 :(得分:0)
重新格式化,您的查询如下:
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;
答案 3 :(得分:0)
MS Access中的OLEDB连接不支持关键字CASE和WHEN。
您只能使用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
出席 GROUP BY Attendance.StudentName;