【问题标题】:Difference of values in the same column ms access sql (mdb)同一列ms访问sql(mdb)中的值差异
【发布时间】:2021-11-19 21:31:11
【问题描述】:

我有一个表,其中包含两列的值不是唯一的,这些值是自动生成的,我无法对此做任何事情,无法编辑表、数据库或制作自定义函数。

考虑到这一点,我已经在 sql server 中解决了这个问题,但它包含一些 ms-access 中不存在的功能。

这些列是 Volume 和 ComponentID,这是我在 sql 中的代码:

with rows as (
                 select row_number() over (order by volume) as rownum, volume
                from   test where componentid = 'S3')
 
select top 10
       rowsMinusOne.volume, coalesce(rowsMinusOne.volume - rows.volume,0) as diff
from   rows as rowsMinusOne
                left outer join rows
                       on rows.rownum = rowsMinusOne.rownum - 1

样本数据:

58.29168 
70.57396
85.67902
97.04888
107.7026
108.2022
108.3975
108.5777
109
109.8944

预期结果:

Volume diff
58.29168 0
70.57396 12.28228
85.67902 15.10506
97.04888 11.36986
107.7026 10.65368
108.2022 0.4996719
108.3975 0.1952896
108.5777 0.1801834
109 0.4223404
109.8944 0.89431

我已经通过用 NZ 替换它来解决合并的一部分,我尝试使用 DCOUNT 来解决 row_number (How to show the record number in a MS Access report table?) 但我收到了它找不到函数的错误(我正在读取数据通过代码,这是我唯一能做的)。

我也尝试过,但是正如答案所说,我需要一个具有唯一值的列,我没有也无法创建 Microsoft Access query to duplicate ROW_NUMBER

【问题讨论】:

  • 这里的 Mosy 人想要示例表数据,以及预期的结果,格式文本而不是图像。
  • @jarrlh 抱歉让我编辑我的问题。
  • 在示例数据中看不到 ComponentID。我认为这两个字段一起不会产生唯一值。
  • 您用 SQLServer 测试过,但数据不在 SQLServer 中?
  • @june7 我不使用 ComponenetID 显示任何数据,它仅用于过滤信息并且它们都不会产生唯一值。我已经使用 SQLServer 进行了测试,但数据在 ms-access(mdb 文件)中,我正在尝试做同样的事情,但不使用仅在 SQLServer 中可用的函数,如 ROW_Number 和 COALEASE,对于 coleaase,我知道函数等效,但是对于 ROW_Number,我没有找到任何可以帮助我的东西。

标签: sql ms-access


【解决方案1】:

考虑:

SELECT TOP 10 Table1.ComponentID, 
DCount("*","Table1","ComponentID = 'S3' AND Volume<" & [Volume])+1 AS Seq, Table1.Volume, 
Nz(Table1.Volume -
    (SELECT Top 1 Dup.Volume FROM Table1 AS Dup 
     WHERE Dup.ComponentID = Table1.ComponentID AND Dup.Volume<Table1.Volume 
     ORDER BY Volume DESC),0) AS Diff
FROM Table1
WHERE (((Table1.ComponentID)="S3"))
ORDER BY Table1.Volume;

对于大型数据集,这可能会执行得很慢。

替代解决方案:

  1. 构建计算差异的查询,将该查询用作报告的源,使用文本框 RunningSum 属性计算序列号

  2. VBA 循环遍历记录集并将结果保存到“临时”表中

  3. 导出到 Excel

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2020-03-11
    • 2017-05-17
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多