我表格中的两个字段是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。
你能告诉我吗?谢谢。答案 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
。