【问题标题】:Why am I getting "Invalid argument to function" and "Enter parameter value" when running my access query?为什么我在运行访问查询时收到“函数参数无效”和“输入参数值”?
【发布时间】:2019-08-17 00:46:09
【问题描述】:

我有一个记录列表:

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 

查询1的访问sql代码为:

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;

【问题讨论】:

  • 首先,不应在单独的行上重复名为 uniqueid 的内容。其次,如果你只有一列,这在 MS Access 中是非常困难的。你还有其他专栏吗?
  • 原表还有另一列“流入”,但此处未使用。对不起“唯一ID”。只是命名问题。您可以只使用它的帐户 ID。

标签: sql ms-access select subquery ms-access-2010


【解决方案1】:

为什么不这样做:

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

【讨论】:

  • 谢谢,但我怎样才能从那里得到累积计数?
  • 为什么要查看每行的计数?没有意义。
  • “分组依据”会将具有相同 id 的所有行分组,并为您提供具有相同 id 的行数。
【解决方案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 都是唯一的。

    如果这不起作用,那么您可以将数据复制到具有自动编号列的新表中。您可以使用自动编号列代替inflow

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 2016-08-08
      • 2019-04-02
      • 1970-01-01
      • 2021-05-30
      • 2011-10-08
      相关资源
      最近更新 更多