【问题标题】:Substituting Nulls替换空值
【发布时间】:2015-12-06 04:12:05
【问题描述】:

我们有以下表格(根据从单独表格中提取的数据填充),其中包含 3 个字段:

表格的内容(/原始数据源内容)受到严格控制,因此,虽然 Null 值可以出现在 Ax 或 Ay 中,但它们永远不会出现在两者中。

记录 1,2 和 3 与以下商定规则相同: “如果存在空值,则字段条目的值应取自相邻的非空 Ax/Ay” 这样,记录 1,2 和 3 被解释为 Ax 和 Ay 值为 1。

目前,在执行数据分析时,所有 sql 构造都必须考虑 Null 的可能存在,最终结果是 sql 复杂性/要检查的条件数量增加,这也导致引入人工的风险增加错误。这些风险在真实表中被放大,其中包含更多相似的字段对,可以应用相似的规则。 由于所有分析都只查看提取数据表,而不是原始/源数据...

--> 在这种情况下,通过 UPDATE 预先准备/修改提取表以使用相应的相邻字段填充所有此类遇到的 Null 值是否是可接受的做法? ...旨在实现更简单的写入/读取,也许更高效/更快地执行 sql。

【问题讨论】:

    标签: sql ms-access null


    【解决方案1】:

    没有理由更新表格,这是我建议您不要走的路径。
    该表用于存储数据,而不是处理数据。
    您正在寻找的是 View,用于按原样显示表格,包括您对数据的约定规则。

    例如,对于以下代码(SQL-Server):

     CREATE TABLE MyTable(
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [Ax] [int] NULL,
        [Ay] [int] NULL
      )
    
    
    
    CREATE VIEW MyView
      AS
      SELECT ID,
            CASE 
             WHEN Ax IS NULL THEN Ay
             Else Ax END 
             as Ax,
            CASE 
            WHEN Ay IS NULL THEN Ax
             Else Ay 
             END as Ay
    FROM  MyTable       
    
    INSERT INTO MyTable 
    VALUES (1,1)
    INSERT INTO MyTable 
    VALUES(1,NULL)
    INSERT INTO MyTable 
    VALUES(NULL,1)
    INSERT INTO MyTable 
    VALUES(1,2)
    
    SELECT * FROM MyTable
    SELECT * FROM MyView
    

    我明白了:

    【讨论】:

    • 非常感谢,我很抱歉没有提到我们正在使用 MS Access - 我认为不支持视图。但是,这(更新我的原始帖子中的用法)是否可以归类为“数据清理”,因为我们正在准备表格进行分析,并且该表格是原始数据源的副本?
    • 我认为 MS Access does support views
    • 至于您的问题,我认为在插入数据时进行“清理”更有意义。避免以对您无用的形式保存数据(听起来这就是您的情况......)
    • 这很有道理。我会看看是否有任何方法可以修改提取 sql 以执行一些清理,或者,围绕伴随模式 .csv 提取导入阶段的过程。 Views 是我以前没有使用过的东西,是的,我现在看到 Access 支持它,所以我也会检查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多