Почему я получаю «Недопустимый аргумент для функции» и «Введите значение параметра» при выполнении моего запроса доступа? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть список записей:

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;

Это даст мне результат "Недопустимый аргумент для функции", и код сработает, если я удалю аргумент порядка1, например

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 

и 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;

Ответы [ 3 ]

0 голосов
/ 26 марта 2019

Попробуйте аналитические функции. Примерно так:

select UniqueID
, row_number() over(partition by UniqueID order by UniqueID) times
from query1
0 голосов
/ 27 марта 2019

Ваша лучшая ставка (кроме смены баз данных):

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.

Если это не сработает,затем вы можете скопировать данные в новую таблицу, в которой есть столбец автоматического номера.Вы можете использовать столбец автоматического номера вместо inflow.

0 голосов
/ 26 марта 2019

Почему бы не сделать что-то вроде:

SELECT a.UniqueId, count(a.uniqueId)
FROM Table a
GROUP BY a.uniqueId
...