用于删除重复项并获取计数的SQL语句

时间:2011-01-24 16:11:39

标签: sql ms-access

我持续的SQL头痛......

如果我运行这个释义代码:

SELECT State, Name, ID
FROM ...
WHERE Lost=False

我会得到类似以下的内容:

State        Name        ID
NY            A          123
NY            A          123
NY            B          234
NY            C          345
MD            X          356
MD            Y          668

我真正需要的是每个州的资源数量的总和。这里的问题是,如果我只是执行以下操作,则不会考虑到明显重复(请参阅上面的前两条记录)。

 SELECT state, Count(state) AS statecount
    FROM ....
   GROUP BY state, Lost
   HAVING Lost=false

如何只获取不同的记录,我是如何计算丢失=假的每个州的记录数? 我想可能会在第一个查询中放入DISTINCT,然后在ColdFusion中运行查询查询,但是你不能在子查询中执行聚合操作。

基本上,以上面的例子为例,我最终想要这个:

            State      Count
              NY          3 (not 4!)
              MD          2

我应该注意......这是在Access

5 个答案:

答案 0 :(得分:2)

显然Access 2007支持内联视图。所以你可以做到这一点。 (我不知道早期版本)

SELECT 
   state,
   COUNT(CR_ID )

   FROM

   (


       SELECT  DISTINCT 
       lkuState.StateName AS state, 
       tblMain.CR_ID 
       FROM lkuState 
       INNER JOIN 
       (tblMain 
       INNER JOIN (locLink 
       INNER JOIN tblLoc 
       ON locLink.GEOMETRY_ID = tblLoc.GEOMETRY_ID) 
       ON tblMain.CR_ID = locLink.CR_ID) 
       ON lkuState.FIPS_State = tblLoc.FIPS_State 

       WHERE tblMain.Lost=False) t

GROUP BY
State

更新

正如David-W-Fenton关于我对哪些版本支持派生表/内联视图的不确定性的说明

  

Jet / ACE长期以来一直支持派生表,尽管语法曾经与简单(SELECT ...)As Alias完全不同 - 它是[SELECT ...]。请注意关闭方括号上的尾随句点,这样就排除了需要内部方括号的SQL SELECT

答案 1 :(得分:0)

首先创建一个视图:

SELECT DISTINCT State, Name FROM OriginalTable

然后,在较大的查询中,将OriginalTable替换为您从中获取此信息的表。

答案 2 :(得分:0)

首先使用

在表格中添加标识列
alter table ATTENDANCE add AUTOID INT IDENTITY

然后在查询

下面运行
Select State,count(*) as cnt
FROM TableName
WHERE AUTOID IN (SELECT MAX(AUTOID) FROM TableName GROUP BY State, Name, id)
group by State
having count(*) > 1

答案 3 :(得分:0)

这是一种名为“ SPL”的语言,可以使用一行代码来实现:

file("d:/table.xlsx").xlsimport@tx().group(State;~.icount(ID):count)

显示在以下附件中:

https://i.stack.imgur.com/Eola3.png

答案 4 :(得分:-1)

SELECT state, Count(distinct ID) AS statecount
FROM ....
GROUP BY state, Lost
HAVING Lost=false