COUNT功能不起作用?

时间:2015-08-05 09:15:15

标签: sql

我有FGLEDGE表,包括(以及其他许多)以下列:

EGVONO  EGACDT      EGAIT1  EGAIT6  EGACAM
1181941 20150616    2990    1123445 3598,8
1181942 20150616    2990    1118741 136249,65
1181943 20150616    2990    1121430 20874,9
1181944 20150616    2990    1122177 21569,5
1181945 20150616    2990    6215746 340
1181946 20150630    2990    1121844 26395,8
1181946 20150630    2990    1123293 52453,15
1181946 20150630    2990    6213402 514,12
1181946 20150630    2990    6213404 514,12
1181947 20150616    2990    1120779 89568
1181948 20150616    2990    1122610 11972,73

我想要一个查询,它将返回SPECIFIC凭证编号(EGVONO)在EGAIT6列中有几个不同编号的所有行。

我的查询是:

SELECT 
COUNT(DISTINCT FGLEDG.EGAIT6),
FGLEDG.EGVONO, 
FGLEDG.EGACDT, 
FGLEDG.EGAIT1, 
FGLEDG.EGAIT6, 
FGLEDG.EGACAM

FROM SEUHABOB.MVXADTA001.FGLEDG FGLEDG

WHERE (FGLEDG.EGCONO=001) 
AND (FGLEDG.EGDIVI='D16') 
AND (FGLEDG.EGTRCD=41) 
AND (FGLEDG.EGVONO=1181946) 
AND (FGLEDG.EGAIT1='2990')
AND COUNT (DISTINCT FGLEDG.EGAIT6)>1

预期结果应为

EGVONO  EGACDT  EGAIT1  EGAIT6  EGAIT7  EGACAM       COUNT
1181946 20150630    2990    1121844 PP20225 26395,8  4
1181946 20150630    2990    1123293 PP20225 52453,15 4
1181946 20150630    2990    6213402 PP20225 514,12   4
1181946 20150630    2990    6213404 PP20225 514,12   4

我收到错误消息:“使用COUNT函数无效”。

为什么Count功能不起作用?我写错了吗?

2 个答案:

答案 0 :(得分:1)

要获取计数和详细信息,首先找到匹配的EGVONO然后再加入:

SELECT 
FGLEDG.EGVONO, 
FGLEDG.EGACDT, 
FGLEDG.EGAIT1, 
FGLEDG.EGAIT6, 
FGLEDG.EGACAM,
dt.CNT

FROM SEUHABOB.MVXADTA001.FGLEDG FGLEDG
JOIN
 (
   SELECT 
      FGLEDG.EGVONO,
      COUNT(DISTINCT FGLEDG.EGAIT6) AS CNT
   FROM SEUHABOB.MVXADTA001.FGLEDG FGLEDG
   WHERE (FGLEDG.EGCONO=001) 
   AND (FGLEDG.EGDIVI='D16') 
   AND (FGLEDG.EGTRCD=41) 
   AND (FGLEDG.EGVONO=1181946) 
   AND (FGLEDG.EGAIT1='2990')
   GROUP BY FGLEDG.EGVONO
   HAVING COUNT (DISTINCT FGLEDG.EGAIT6)>1
 ) AS dt
ON FGLEDG.EGVONO = dt.EGVONO
WHERE (FGLEDG.EGCONO=001) 
AND (FGLEDG.EGDIVI='D16') 
AND (FGLEDG.EGTRCD=41) 
AND (FGLEDG.EGVONO=1181946) 
AND (FGLEDG.EGAIT1='2990')

希望Access支持...

答案 1 :(得分:0)

您需要添加GROUP BY和COUNT(...)>的过滤器1需要在HAVING子句而不是WHERE子句中:

SELECT 
    COUNT(DISTINCT FGLEDG.EGAIT6),
    FGLEDG.EGVONO, 
    FGLEDG.EGACDT, 
    FGLEDG.EGAIT1, 
    FGLEDG.EGAIT6, 
    FGLEDG.EGACAM

FROM SEUHABOB.MVXADTA001.FGLEDG FGLEDG

WHERE (FGLEDG.EGCONO=001) 
    AND (FGLEDG.EGDIVI='D16') 
    AND (FGLEDG.EGTRCD=41) 
    AND (FGLEDG.EGVONO=1181946) 
    AND (FGLEDG.EGAIT1='2990')
GROUP BY 
    FGLEDG.EGVONO, 
    FGLEDG.EGACDT, 
    FGLEDG.EGAIT1, 
    FGLEDG.EGAIT6, 
    FGLEDG.EGACAM
HAVING COUNT (DISTINCT FGLEDG.EGAIT6)>1

试试这个。