SQL в MS-Access: использование COUNT, JOIN и возврат 0 - PullRequest
0 голосов
/ 04 августа 2010

Извиняюсь за публикацию этого, но хотя на сайте есть несколько примеров, я просто не могу заставить мою работать.

Итак, у меня есть две таблицы:

Телефонный стол

ID | Name | GradeID
1    Richard   1
2    Allan     1
3    Peter

У меня также есть таблица оценок:

ID | Name
1    1
2    2
3    3
4    4
5    5

В любом случае, я пытаюсь использовать COUNT () и LEFT JOIN, чтобы узнать, сколько раз каждый класс был найден в таблице телефонии, включая возврат любых 0, используя следующий запрос:

SELECT telephony.GradeID, COUNT(*) AS Total
FROM telephony LEFT JOIN grade 
ON telephony.GradeID = grade.ID
GROUP BY telephony.GradeID
ORDER BY 1;

Этот запрос возвращает все найденные, но не возвращает все оценки с 0 записями:

Grade | Total
1       2

Пожалуйста, помогите. Я использую Microsoft Access 2003.


Спасибо за вашу помощь. Это прекрасно работает.

Однако, когда я пытаюсь ввести ДАТУ МЕЖДУ, он возвращает только найденные оценки.

Есть идеи?

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 августа 2010

Я думаю, это то, что вы ищете:

SELECT grade.ID, Count(telephony.ID) AS CountOfID
FROM grade LEFT JOIN telephony ON grade.ID= telephony.GradeID
GROUP BY grade.ID
ORDER BY 1;

Кстати: «Имя» - это очень плохое имя для столбца, поскольку это зарезервированное слово.

0 голосов
/ 04 августа 2010

Поскольку только таблица оценок содержит все доступные идентификаторы, вы должны использовать grade.ID в SELECT вместо telephony.GradeID. Попробуйте выполнить этот запрос:

SELECT grade.ID, COUNT(telephony.ID) FROM grade
LEFT JOIN telephony ON telephony.GradeID = grade.ID
GROUP BY grade.ID
ORDER BY 1;
...