2

我表中的字段中有 2 个字段,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和 none 似乎解决了这个确切的问题。这是我尝试过的:

一个)

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

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

二)

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。

你能给些建议么?谢谢。

4

2 回答 2

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;   
于 2012-09-14T14:19:37.900 回答
0

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

于 2012-09-14T14:19:55.467 回答