как установить диапазон значений по умолчанию в запросе количества - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть простая таблица значений:

column1
-------
   2
   5
   7
   5
   8
   7

и этот простой запрос подсчета чисел:

SELECT column1, count(column1) as counter
FROM table
GROUP BY column1
ORDER BY count(column1) DESC

Вопрос, как я могу добавить строки со значениями 0, когда у меня есть диапазон номеров, например, от 1 до 8. Я хочу получить такой результат:

column1   Counter
--------  -------
   5         2
   7         2
   2         1
   8         1
   1         0   <-- Row Add
   2         0   <-- Row Add 
   3         0   <-- Row Add
   4         0   <-- Row Add
   6         0   <-- Row Add

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

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

SELECT 
    T.Column1, 
    Count(Table.[Column1]) AS [Counter]
FROM
    (SELECT DISTINCT Abs([id] Mod 10) AS Column1
    FROM MSysObjects
    WHERE (Abs([id] Mod 10)) Between 1 And 8) As T
LEFT JOIN 
    [Table] 
    ON T.Column1 = Table.Column1
GROUP BY 
    T.Column1
ORDER BY 
    Count(Table.[Column1]) DESC, 
    T.Column1;

Выход:

enter image description here

0 голосов
/ 11 апреля 2020

Если вы хотите использовать более 1 запроса и поместить свой диапазон чисел в таблицу хотя бы временно, то вы можете сделать это с помощью полного внешнего объединения. Чтобы выполнить полное внешнее соединение в доступе, вы объединяете левое соединение и правое соединение, используя либо UNION, либо UNION ALL.

enter image description here

enter image description here

скопируйте sql из правого и левого объединений в запрос объединения, затем добавьте объединение и порядок по операторам к запросу объединения.

SELECT SpecialNumbers.Numbers, mytable.Column1, Count(mytable.Column1) AS CountOfColumn1
FROM SpecialNumbers LEFT JOIN mytable ON SpecialNumbers.Numbers = mytable.Column1
GROUP BY SpecialNumbers.Numbers, mytable.Column1
UNION
SELECT SpecialNumbers.Numbers, mytable.Column1, Count(mytable.Column1) AS CountOfColumn1
FROM SpecialNumbers RIGHT JOIN mytable ON SpecialNumbers.Numbers = mytable.Column1
GROUP BY SpecialNumbers.Numbers, mytable.Column1
ORDER BY CountOfColumn1 DESC;

Учитывая мой специальные числа, где от 1 до 10 Это превращается

enter image description here

до

enter image description here

...