Инструкция SQL для удаления дубликатов и получения количества - PullRequest
1 голос
/ 24 января 2011

Моя постоянная головная боль в 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 в первый запрос, а затем запустив Query of the Query в ColdFusion, но вы не можете делать такие вещи, как агрегаты в подзапросах.

В принципе, используя приведенное выше в качестве примера, я бы в конечном счетехочу это:

            State      Count
              NY          3 (not 4!)
              MD          2

Я должен отметить ... это в Access

Ответы [ 4 ]

2 голосов
/ 24 января 2011

Видимо 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

Обновление

Как отмечает Дэвид-В-Фентон ниже относительно моей неопределенности относительно того, какие версии поддерживаютсяТаблицы / встроенные представления

Производные таблицы уже давно поддерживаются Jet / ACE, хотя раньше синтаксис сильно отличался от простого (SELECT ...) для псевдонима - это было [SELECT...].Обратите внимание на конечный период в квадратных скобках, и это исключает возможность SQL SELECT, когда требуются внутренние квадратные скобки

0 голосов
/ 28 мая 2013

Сначала добавьте столбец Identity в таблицу, используя

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
0 голосов
/ 24 января 2011

Сначала создайте представление:

SELECT DISTINCT State, Name FROM OriginalTable

Затем в более крупном запросе замените OriginalTable таблицей, из которой вы черпаете эту информацию.

0 голосов
/ 24 января 2011
SELECT state, Count(distinct ID) AS statecount
FROM ....
GROUP BY state, Lost
HAVING Lost=false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...