2014-09-19 3 views
0

Я пишу запрос для работы в Microsoft Access. Сырая таблица выглядит следующим образом:SQL - несколько групп по операторам с подсчетами

Колонна

КОЛ | ColB

aa | x

aa | y

bb | x

bb | x

Проблема, которую я пытаюсь решить, заключается в следующем: для каждого отдельного значения в столбце A, каков счетчик различных значений в столбце B?

Результат будет примерно таким:

aa | 2

bb | 1

Я хотел бы сделать шаг дальше и выбрать только те, где счетчик = 1, так:

бб | 1

будет единственным результатом.

Я нашел то, что считаю чрезмерно сложным подзапросом, чтобы выполнить это, но я надеюсь, что у кого-то есть более элегантное решение.

Благодаря

ответ

1

Для выбора значения A, которые имеют только одно значение B, вы можете использовать:

select t.A 
from mytable as t 
group by t.A 
having min(t.B) = max(t.B); 

Это игнорирует NULL значений при рассмотрении дубликатов. Это может быть учтено в случае необходимости. Кроме того, граф кажется излишним, потому что он всегда будет 1.

+0

Что делать, если число было чем-то иным, чем одно, скажем 2. Есть ли аналогичный запрос без подзапроса? – user1825257

+0

@ пользователь1825257. , , Это становится сложнее, потому что Access не поддерживает 'count (distinct)'. Я думаю, что в этом случае потребуется подзапрос. Это было бы легко в любой другой реляционной базе данных. –

0

Решение, которое я придумал является:

SELECT X.A, COUNT(X.B) 
FROM (
     SELECT D.A, D.B 
     FROM MY_TABLE as D 
     GROUP BY D.A, D.B 
    ) AS X 
GROUP BY X.A 
HAVING COUNT(X.B) = 1 
Смежные вопросы