Access 2013 中的 DMedian,未返回任何值

2024-02-22

我在 MS Access 2013 中有以下查询,但不返回中值。

字段 IU 始终为 NULL(空白)或 1。列 GM 是一个介于 -5 和 5 之间、格式为 0.0000 的数字,其中偶尔会出现 NULL 值。

SELECT IU, DMedian("GM","tblFirst250","IU=1") AS MedianByIU
FROM tblFirst250
WHERE IU = 1
GROUP BY IU;

但是,在尝试调试此问题时,当我使用 DAvg 而不是 DMedian 时,我得到了平均值。

我从以下位置获得了 DMian(因为我知道 Access 2013 没有它):https://msdn.microsoft.com/en-us/library/dd789431(v=office.12).aspx https://msdn.microsoft.com/en-us/library/dd789431(v=office.12).aspx

这是我数据库中名为 basDMedian 的模块中的代码:

Public Function DMedian( _
 ByVal strField As String, ByVal strDomain As String, _
 Optional ByVal strCriteria As String) As Variant

    ' Purpose:
    '     To calculate the median value
    '     for a field in a table or query.
    ' In:
    '     strField: the field.
    '     strDomain: the table or query.
    '     strCriteria: an optional WHERE clause to
    '                  apply to the table or query.
    ' Out:
    '     Return value: the median, if successful;
    '                   Otherwise, an Error value.

    Dim db As DAO.Database
    Dim rstDomain As DAO.Recordset
    Dim strSQL As String
    Dim varMedian As Variant
    Dim intFieldType As Integer
    Dim intRecords As Integer

    Const errAppTypeError = 3169

    On Error GoTo HandleErr

    Set db = CurrentDb()

    ' Initialize return value.
    varMedian = Null

    ' Build SQL string for recordset.
    strSQL = "SELECT " & strField & " FROM " & strDomain

    ' Only use a WHERE clause if one is passed in.
    If Len(strCriteria) > 0 Then
        strSQL = strSQL & " WHERE " & strCriteria
    End If

    strSQL = strSQL & " ORDER BY " & strField

    Set rstDomain = db.OpenRecordset(strSQL, dbOpenSnapshot)

    ' Check the data type of the median field.
    intFieldType = rstDomain.Fields(strField).Type
    Select Case intFieldType
    Case dbByte, dbInteger, dbLong, _
      dbCurrency, dbSingle, dbDouble, dbDate
        ' Numeric field.
        If Not rstDomain.EOF Then
            rstDomain.MoveLast
            intRecords = rstDomain.RecordCount
            ' Start from the first record.
            rstDomain.MoveFirst

            If (intRecords Mod 2) = 0 Then
                ' Even number of records.
                ' No middle record, so move to the
                ' record right before the middle.
                rstDomain.Move ((intRecords \ 2) - 1)
                varMedian = rstDomain.Fields(strField)
                ' Now move to the next record, the
                ' one right after the middle.
                rstDomain.MoveNext
                ' And average the two values.
                varMedian = _
                  (varMedian + rstDomain.Fields(strField)) / 2
                ' Make sure you return a date, even when
                ' averaging two dates.
                If intFieldType = dbDate And Not IsNull(varMedian) Then
                    varMedian = CDate(varMedian)
                End If
            Else
                ' Odd number or records.
                ' Move to the middle record and return its value.
                rstDomain.Move ((intRecords \ 2))
                varMedian = rstDomain.Fields(strField)
            End If
        Else
            ' No records; return Null.
            varMedian = Null
        End If
    Case Else
        ' Non-numeric field; so raise an app error.
        Err.Raise errAppTypeError
    End Select

    DMedian = varMedian

ExitHere:
    On Error Resume Next
    rstDomain.Close
    Set rstDomain = Nothing
    Exit Function

HandleErr:
    ' Return an error value.
    DMedian = CVErr(Err.Number)
    Resume ExitHere
End Function

我的目标是获取 IU = 1 的记录的 GM 列的中值。我得到的值是 NULL/空白。如果有更好的方法,请告诉我。谢谢!


问你的DMedian表达式忽略任何空值GM field.

SELECT IU, DMedian("GM","tblFirst250","IU=1 AND GM Is Not Null") AS MedianByIU
FROM tblFirst250
WHERE IU = 1
GROUP BY IU;

基本上发生的事情是DMedian打开按以下顺序排序的记录集GM然后(大致)移动记录集的一半以获得中值。但如果该行中的值碰巧为 Null...

GM
--
Null
Null  <- median
2

... DMedian告诉你中位数为空。所以指导一下DMedian仅加载行GM Is Not Null给你非空值的中位数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Access 2013 中的 DMedian,未返回任何值 的相关文章

  • 仅从数据库获取我想要的数据但保留结构

    我正在尝试在 powerbi 上执行此操作 但我想这只是基本的 SQL 我想将我的数据导入到 powerBi 中 但使用一些 id 对其进行过滤 我们以这个例子为例 我与一些公司有数据库 表1 每个公司都有建筑物 表2 每个建筑物有员工 表
  • 删除原始数据中部分重复的记录

    我需要删除表中时间间隔为 1 或 2 分钟或相同且必须相同的所有记录ID但保留第一个记录 ID Time SN SD WE FW 10 2014 06 30 19 17 37 000 I 0 100 0 10 2014 06 30 19 1
  • Python SQLite3 SQL注入漏洞代码

    我知道下面的代码片段由于 format 的原因很容易受到 SQL 注入的攻击 但我不知道为什么 有谁明白为什么这段代码容易受到攻击以及我从哪里开始修复它 我知道这些代码片段使输入字段保持打开状态 以便通过 SQL 注入执行其他恶意命令 但不
  • 为什么我们不能有多个主键?

    我知道表中不能有超过 1 个主键 但技术原因是什么 直接拉取自SO https stackoverflow com questions 217945 can i have multiple primary keys in a single
  • 为什么在 Excel for Mac 中使用 VBA 的输入框不显示提示文本?

    我一直在构建一个使用 Excel 跟踪学生成绩的系统 我在 Windows 下编写了它 一切正常 但是当我在 Mac 版本的 Excel 最新版 本 15 24 我相信 上测试它时 InputBoxes 只显示输入数据的标题和文本框 不显示
  • 向用户显示多条验证消息

    在 MS Access 中 如何将从 SELECT 语句检索到的行存储在数组中 并在一个消息框中显示多行 Dim rSEL rSUM rDes As DAO Recordset Dim vItem id vQnty vSum As Inte
  • Oracle:如何查找模式中上次更新(任何表)的时间戳?

    有一个Oracle数据库模式 数据很小 但仍然有10 15个表左右 它包含一种配置 路由表 有一个应用程序必须不时轮询此架构 不得使用通知 如果架构中没有数据更新 应用程序应使用其当前的内存版本 如果任何表有任何更新 应用程序应将所有表重新
  • 在 plsql 中立即执行

    如何从这段代码中得到结果 EXECUTE IMMEDIATE SELECT FROM table name through for loop 通常的方法看起来像这样 for items in select from this table l
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • 将列的值添加到 LIKE 语句中?

    我有 3 个标签表 标签类别和使用过的标签 我想要获取所有标签的列表以及已使用标签的计数 所使用标签的格式是每个具有标签的文档 ID 的逗号分隔值 我一直在尝试类似的方法 但无法将tags tag 字段的值插入到LIKE 语句中 SELEC
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • 从单元格中具有多种颜色的单元格中提取字体颜色

    我有一个 Excel 工作表 我正在尝试将其存入 MySQL 数据库 我使用 VBA 将数据作为文本写入文件 然后将其上传到数据库 在工作表的单元格中 有一些已用颜色编码的字符串 颜色具有一定的含义 因此当我将值移入数据库时 我想保留它们
  • PreparedStatement setnull方法中Types.INTEGER和Types.NULL的区别

    下面的说法有什么区别 PreparedStatement setNull 1 java sql Types NULL and PreparedStatement setNull 1 java sql Types INTEGER 第一个指示驱
  • SQL - 为每条记录调用存储过程

    我正在寻找一种方法来为 select 语句的每条记录调用存储过程 SELECT SomeIds SELECT spro Id FROM SomeTable as spro INNER JOIN Address addr ON addr Id
  • 从 PDO 准备好的语句中获取原始 SQL 查询字符串

    在准备好的语句上调用 PDOStatement execute 时 有没有办法让原始 SQL 字符串执行 出于调试目的 这将非常有用 我假设您的意思是您想要最终的 SQL 查询 并将参数值插入其中 我知道这对于调试很有用 但这不是准备好的语
  • 在适用于 Windows 和 Mac 的 VBA 中指定用户文件夹的路径

    我正在编写一个使用 VBA 从 Excel 生成文件的工具 生成的文件将写入用户的 Documents 文件夹中的文件夹 如果存在 e g C Users
  • SQL Server 转换选择一列并将其转换为字符串

    是否可以编写一条从表中选择列并将结果转换为字符串的语句 理想情况下 我希望有逗号分隔的值 例如 假设 SELECT 语句看起来像这样 SELECT column FROM table WHERE column lt 10 结果是一列包含值的
  • 将多行合并为一行并根据行数附加列

    我正在尝试将同一个表的多行合并为一个 我有一个像这样的示例表 Col1 Col2 Col3 Col4 Col5 Col6 1 BH1 CB 12 CC CC Conveyor Mal 1 BH1 CB 104 ZC ZC Full Emp
  • Yii 查询时对相关模型的限制

    我遇到了极限问题 我正在使用的代码如下 model PostCategory model record model gt with array posts gt array order gt posts createTime DESC li
  • 通过将行旋转为动态数量的列来在 MySQL 中创建摘要视图

    我在 MySQL 中有一个表 其中包含以下字段 id company name year state 同一客户和年份有多行 以下是数据示例 id company name year state 1 companyA 2008 1 2 com

随机推荐

  • 以编程方式获取 Artisan 命令列表

    当您使用 Laravel PHP 框架时 有没有一种方法 在运行时 以编程方式获取当前配置和可用的列表artisan命令 我基本上是在寻找了解的方法 所有命令名称 类或与该类对应的对象 像往常一样 当我清楚地问自己这个问题时 自助服务台就会
  • 无法使用带有功能组件的引用从父函数调用子函数

    最近我正在研究 React 并从父级调用子函数 但是当我在引用上调用 current 时 它给了我未定义的信息 实际上 refs 非常适合以前的父组件 甚至可以调用useImperativeHandle功能也一样 但是使用时useImper
  • 不使用“function”关键字定义匿名函数

    我可以定义和使用匿名函数并像这样调用它 x lt 1 3 sapply x function x x 有时我觉得使用function这样就太啰嗦了 还有其他方法来定义匿名函数吗 In the purrr package https purr
  • 关于 Pytorch 中的奇数图像尺寸

    因此 我目前正在构建一个 2 通道 也称为双通道 卷积神经网络 用于测量 2 个 二进制 图像之间的相似度 我遇到的问题如下 我的输入图像为 40 x 50 经过 1 个卷积层和 1 个池化层 例如 后 输出大小为 18 x 23 那么如何
  • 迭代Python多维关联数组中的一个键

    我正在动态创建一个二维关联数组 字典 我试图循环遍历它的键 同时保持其中一个索引不变 因此例如与第一个括号中带有 john 的 key 关联的所有值 myhash john smith address 1 myhash john doe a
  • 处理 iPad Mini 屏幕尺寸

    新款iPad Mini的屏幕尺寸为7 9英寸 它有视网膜显示屏吗 它会自动扩展现有的 xib 和 Storyboard 还是我们必须为每个版本创建两个版本 我们是否会像处理 iPhone 5 一样处理它 如何创建定义或条件来查看设备是否正在
  • 如何将 ASCII char 转换为其 ASCII int 值?

    我想将 char 转换为它的ASCII http en wikipedia org wiki ASCIIint 值 我可以用所有可能的值填充一个数组并与其进行比较 但这对我来说似乎不正确 我想要类似的东西 char mychar k pub
  • Ruby 独立脚本中的 RoR 环境

    我想运行一个独立的 ruby 脚本 在其中需要使用我的 RoR 环境 具体来说 我需要我的模型扩展 ActionMailer 和 ActiveRecord 我还需要从我的database yml 中读取数据库配置 我该怎么办 最简单的方法是
  • C++ std regex问号问题

    我在使用 std 正则表达式时遇到了麻烦 我无法使问号量词起作用 对 regex match 的调用将始终返回 0 我还尝试了 0 1 它的行为也不像我预期的那样 它的行为就像 量词 这是我的代码 include
  • 如何将表格水平和垂直放置在div的中心

    我们可以将图像设置为背景图像 div like div div 我需要在房间的中央放一张桌子 div 水平和垂直 有没有使用跨浏览器 div div
  • 混合身份验证失败! Facebook 返回无效的用户 ID

    我正在使用 Hybridauth 库在我的网站中创建一个带有 facebook 链接的注册 我在本地主机中创建并测试了代码 一切都运行良好 但是当将所有内容移动到服务器时 它不起作用并给了我这个错误Authentication failed
  • ENOENT 错误 - 安装 aws-cdk 节点模块

    运行命令后 sudo npm i g aws cdk 给出错误 npm ERR Linux 4 4 0 151 generic npm ERR argv usr bin nodejs usr bin npm i g aws cdk npm
  • 方法 [] 被调用为 null

    我是颤振新手 我在 YouTube 和 Google 上看到了很多教程 但找不到解决方案 我该如何解决这个错误 import package flutter material dart import dart ui import dart
  • 在 C# 中使用 Delphi 的结构数组和字符串

    我一直在尝试通过以下方式调用在 Delphi 中创建的方法 function Func1 arrParams array of TParams Integer stdcall type TParams record Type int Nam
  • 如何在 php 中将 stdin 处理为 stdout?

    我正在尝试编写一个简单的 php 脚本来获取数据stdin 处理它 然后将其写入stdout 我知道 PHP 可能不是处理此类事情的最佳语言 但有我需要的现有功能 我试过了 但它不起作用 我这样调用它 echo e ndata n php
  • Rails:Selenium::WebDriver::Error::WebDriverError:不可执行:'chromedriver-helper'

    我两天前设置了 Rails 环境 我以为一切进展顺利 但是当我运行时rake test由于此加载错误 命令已中止 Bundler GemRequireError There was an error while trying to load
  • 使用浏览器获取客户端计算机中目录中所有文件的列表

    虽然这里的用例并不那么重要 但实际上的用途很重要 我想通过浏览器浏览用户本地文件系统 就像我们通过
  • Outlook Web 添加 - 更改标题栏的颜色

    我正在尝试更改插件中标题栏的颜色 我在 xml 文件中看到它在标题栏上生成标题 挂接到标题栏的正确方法是什么 我看到 C 有类似的问题有什么方法可以更改 VSTO Outlook 添加中的边框 标题背景吗 https stackoverfl
  • 可下载字体 - 无法下载某些谷歌字体

    我正在玩可下载字体 api https developer android com guide topics ui look and feel downloadable fonts html 我下载了谷歌示例应用程序 https githu
  • Access 2013 中的 DMedian,未返回任何值

    我在 MS Access 2013 中有以下查询 但不返回中值 字段 IU 始终为 NULL 空白 或 1 列 GM 是一个介于 5 和 5 之间 格式为 0 0000 的数字 其中偶尔会出现 NULL 值 SELECT IU DMedia