#sql #ms-access #select #subquery #ms-access-2010
#sql #ms-access #выберите #подзапрос #ms-access-2010
Вопрос:
У меня есть список записей:
UniqueID
110000
110000
110001
110002
110002
110002
И хотите получить результат того, сколько раз отображается каждая запись, например:
UniqueID times
110000 1
110000 2
110001 1
110002 1
110002 2
110002 3
Мое кодирование похоже:
SELECT m.UniqueID,
(SELECT Count(*)
From [Query1] AS m2
Where m2.UniqueID =m.UniqueID And m2.Order1 <= m.Order1) AS COL2b
FROM [Query1] AS m;
Это дало бы мне результат «Недопустимый аргумент для функции», и код сработает, если я удалю аргумент order1, например
SELECT m.UniqueID,
(SELECT Count(*)
From [Query1] AS m2
Where m2.UniqueID =m.UniqueID) AS COL2b
FROM [Query1] AS m;
И если я изменю код на count (B.Num1) и создам новый запрос, код выдаст мне результат «Введите значение параметра A.Order1», например:
SELECT A.UniqueID, (Select Count(B.Num1)
From [Query1] As B
Where B.UniqueID = A.UniqueID AND B.Order1 <= A.Order1) AS COL2b
FROM [Query1] AS A
ORDER BY A.UniqueID;
Я уверен, что есть проблема с полем Order1 или доступом. Как я могу это исправить?
Для справки, Num1 — это список из 1. Query1 выглядит следующим образом
UniqueID Num1 Order1
110000 1 1
110000 1 2
110001 1 3
110002 1 4
110002 1 5
110002 1 6
и код access sql для запроса 1 является:
SELECT A.UniqueID, A.Num1, (Select Count(B.Num1)
From [TableRecords] As B
Where B.UniqueID <= A.UniqueID) AS Order1
FROM [TableRecords] AS A
ORDER BY A.UniqueID;
Комментарии:
1. Во-первых, что-то вызываемое
uniqueid
не должно повторяться в отдельных строках. Во-вторых, если у вас есть только один столбец, это очень сложно в MS Access. У вас есть какие-либо другие столбцы?2. В исходной таблице есть еще один столбец «Приток», но он здесь не используется. Извините за «UniqueID». Это просто проблема с именованием. Вы можете просто использовать его идентификатор учетной записи.
Ответ №1:
Почему бы не сделать что-то вроде:
SELECT a.UniqueId, count(a.uniqueId)
FROM Table a
GROUP BY a.uniqueId
Комментарии:
1. Спасибо, но как я могу получить совокупный счет оттуда?
2. Почему вы хотите увидеть количество в строке? Не имеет смысла.
3. «Group By» сгруппирует все с одинаковым идентификатором и предоставит вам количество строк с таким же идентификатором.
Ответ №2:
Попробуйте аналитические функции. Что-то вроде этого:
select UniqueID
, row_number() over(partition by UniqueID order by UniqueID) times
from query1
Ответ №3:
Ваш лучший выбор (помимо изменения баз данных) — это:
SELECT m.UniqueID,
(SELECT Count(*)
FROM [Query1] AS m2
WHERE m2.UniqueID = m.UniqueID AND
m2.inflow <= m.inflow
) AS COL2b
FROM [Query1] AS m;
Предполагается, что это inflow
уникально для каждого uniqueid
.
Если это не сработает, вы можете скопировать данные в новую таблицу, в которой есть столбец с автоматическим номером. Вы можете использовать столбец auto number вместо inflow
.