计算不同的查询MS Access

时间:2012-10-04 04:11:23

标签: sql ms-access

似乎我们无法在MS Access中使用Count (Distinct column)功能。我有以下数据和预期结果,如下所示

寻找可以提供所需结果的MS Access查询。

数据

ID     Name     Category    Person  Office
1      FIL       Global     Ben     london
1      FIL       Global     Ben     london
1      FIL       Overall    Ben     Americas
106   Asset      Global     Ben     london
156   ICICI      Overall    Rimmer  london
156   ICICI      Overall    Rimmer  london
188   UBS       Overall     Rimmer  london
9    Fund      Global       Rimmer  london

预期结果

Person  Global_Cnt  Overall_Cnt    
Ben          2         1
Rimmer       1         2

4 个答案:

答案 0 :(得分:1)

使用子查询从表中选择不同的值。

在父查询中GROUP BY Person,并为每个类别使用单独的Count()表达式。 Count()仅计算非空值,因此使用IIf()为感兴趣的类别返回1,否则返回Null。

SELECT
    sub.Person,
    Count(IIf(Category = 'Global', 1, Null)) AS Global_Cnt,
    Count(IIf(Category = 'Overall', 1, Null)) AS Overall_Cnt
FROM
    (
        SELECT DISTINCT ID, Category, Person
        FROM YourTable
    ) AS sub
GROUP BY sub.Person;

我不确定哪些字段标识了您的唯一值,因此请选择IDCategoryPerson。查询的结果集符合您的要求;如果SELECT DISTINCT字段列表与实际数据不符,请更改它。

答案 1 :(得分:0)

在Microsoft Access中创建查询时,您可能希望仅返回不同的值或唯一值。查询的属性表中有两个选项,“唯一值”和“唯一记录”:

DISTINCT和DISTINCTROW有时会提供相同的结果,但存在显着差异:

<强> DISTINCT DISTINCT仅检查SQL字符串中列出的字段,然后删除重复的行。 DISTINCT查询的结果不可更新。它们是数据的快照。

DISTINCT查询类似于Summary或​​Totals查询(使用GROUP BY子句的查询)。

<强> DISTINCTROW 另一方面,DISTINCTROW检查正在查询的表中的所有字段,并根据整个记录(而不仅仅是所选字段)消除重复项。 DISTINCTROW查询的结果是可更新的。

Read More...

答案 2 :(得分:0)

select count(column) as guessTable
from
(
    select distinct column from Table
)

答案 3 :(得分:0)

MS Access-Engine不支持

 SELECT count(DISTINCT....) FROM ...

你必须这样做:

 SELECT count(*) 
 FROM
 (SELECT DISTINCT Name FROM table1)

它有点解决方法......你在计算DISTINCT的选择。