admin

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

sql

我持续的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中


阅读 381

收藏
2021-07-01

共1个答案

admin

显然,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

2021-07-01