Microsoft Access中的不同聚合查询与另一个字段上的分组依据

时间:2012-09-14 14:15:44

标签: sql ms-access group-by distinct aggregate-functions

我表格中的两个字段是CTN_NUM和PO_NUM。每个PO_NUM具有至少一个CTN_NUM,可能更不同或重复。任何给定的CTN_NUM都不能超过1个PO_NUM。换句话说,这是一对多的关系。我想创建一个查询,显示每个PO_NUM的唯一CTN_NUM的数量。我在这个论坛以及http://blogs.office.com/b/microsoft-access/archive/2007/09/19/writing-a-count-distinct-query-in-access.aspx上看到了其他主题,似乎没有人解决这个问题。 这是我试过的:

A)

SELECT PO_NUM, Count(CTN_NUM) AS CountOfCTN_NUM  
FROM tempSpring_ASN  
GROUP BY PO_NUM;  

这将返回每个PO_NUM的所有CTN_NUM的计数,即使它们不是唯一的。

B)

SELECT PO_NUM, Count(DISTINCT CTN_NUM) AS CountOfCTN_NUM  
FROM tempSpring_ASN  
GROUP BY PO_NUM;  

虽然这可能在其他RDBMS中有效,但在Access中我遇到语法错误。

C)

SELECT COUNT(*)  
FROM  
(SELECT DISTINCT CTN_NUM AS cn  
FROM tempSpring_ASN);  

这将返回与表不同的CTN_NUM的总和,与PO_NUM不同。

D)与C相同,但使用GROUP BY:

SELECT COUNT(*)  
FROM  
(SELECT DISTINCT CTN_NUM AS cn  
FROM tempSpring_ASN)  
GROUP BY PO_NUM;  

这会提示我输入PO_NUM。

你能告诉我吗?谢谢。

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT PO_NUM, COUNT(*) AS CountOfCTN_NUM    
FROM   (
    SELECT PO_NUM, CTN_NUM 
    FROM tempSpring_ASN
    GROUP BY PO_NUM, CTN_NUM 
) a
GROUP BY PO_NUM;   

这也应该有效:

SELECT PO_NUM, COUNT(*) AS CountOfCTN_NUM   
FROM   (
    SELECT DISTINCT PO_NUM, CTN_NUM 
    FROM tempSpring_ASN
) a
GROUP BY PO_NUM;   

答案 1 :(得分:0)

D上有语法错误。子查询中不存在PO_NUM,因此您无法在其上使用group by。可能是子查询未命中PO_NUM