MS ACCESS count/количество строк, без дубликатов

Вопрос:У меня есть следующая таблица, в которой мне нужно подсчитать общее количество строк без учета дубликатов записей. CustomerID test1 test1 test2 test3 test4 test4 Как вы можете видеть, общее число строк равно 6, но есть два теста test1 и two test4, и я хочу, чтобы запрос возвращался. 4. IOW, я хочу подсчитать уникальные значения в

Вопрос:

У меня есть следующая таблица, в которой мне нужно подсчитать общее количество строк без учета дубликатов записей.

CustomerID test1 test1 test2 test3 test4 test4

Как вы можете видеть, общее число строк равно 6, но есть два теста test1 и two test4, и я хочу, чтобы запрос возвращался. 4. IOW, я хочу подсчитать уникальные значения в CustomerID.

Я пробовал суб-запрос, но не получил его для работы.

– Обновление 27/06/2012 –

Спасибо, оба работали для меня:

  • SELECT COUNT (*) FROM (SELECT CustomerID FROM TheTable GROUP BY CustomerID) как
  • SELECT COUNT (*) ИЗ (     SELECT DISTINCT CustomerID FROM TheTable ) AS sub;

Мне теперь нужен запрос, чтобы сохранить только те CustomerID, которые были добавлены сегодня, а затем подсчитать их.

Например,

CustomerID DateAdded test1 25/06/2012 test1 25/06/2012 test2 26/06/2012 test3 27/06/2012 — Today test4 27/06/2012 — Today test4 27/06/2012 — Today

тогда ему нужно вернуть 3.

Я попытался добавить следующий запрос к двум предоставленным решениям, но не смог заставить их работать/возвращать требуемое значение.

HAVING (([TheTable].DateAdded) = Date());

Лучший ответ:

Второе предложение в ответе dbaseman выглядит правильно для меня. Эта альтернатива также должна работать.

SELECT COUNT(*) FROM ( SELECT DISTINCT CustomerID FROM TheTable ) AS sub;

Я не знаю, имеет ли это преимущество перед dbaseman GROUP BY. Если вы решите протестировать оба подхода, добавьте комментарий, чтобы сообщить нам, что вы найдете.

На основе вашего комментария вы хотите оценить “только те записи, которые были добавлены сегодня”. Поскольку вы не предоставили нам достаточно информации о своей таблице, я сделаю вид, что она включает в себя поле Date/Time с именем date_added. И каждый раз, когда вы добавляете запись, вы сохраняете текущую дату с компонентом времени как полночь в этом поле. В этом случае вы можете добавить предложение WHERE в подзапрос, чтобы попросить механизм db рассмотреть только те строки, где date_added равно сегодняшней дате. Функция Date() даст вам сегодняшнюю дату с полуночью в качестве компонента времени.

SELECT COUNT(*) FROM ( SELECT DISTINCT CustomerID FROM TheTable WHERE date_added = Date() ) AS sub;

Как только вы замените date_added своим именем поля, это должно работать, если мои предположения верны. Однако, если ваши значения date_added включают любой компонент времени, отличный от midnite, вам придется пересмотреть предложение WHERE, чтобы отображать все значения Date/Time с сегодняшнего дня.

WHERE date_added >= Date() AND date_added < (Date() + 1) Ответ №1

<ы > Это будет работать в SQL, я думаю, что он также должен быть в Access:

SELECT COUNT(DISTINCT CustomerID) FROM TheTable

Изменить: Per Jeff в комментариях, Access не поддерживает вышеупомянутый синтаксис.

Это должно работать наверняка, хотя:

SELECT COUNT(*) FROM ( SELECT CustomerID FROM TheTable GROUP BY CustomerID ) a

Ограничение по дате

SELECT COUNT(*) FROM ( SELECT TheTable.CustomerID FROM TheTable GROUP BY CustomerID WHERE TheTable.DateAdded >= Date() ) a

Оцените статью
Добавить комментарий