代替Null

时间:2015-12-06 04:12:05

标签: sql ms-access null

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

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

记录1,2和3与以下商定的规则相同: "当存在Null值时,字段条目的值应取自相邻的非空Ax / Ay" 有了这个,记录1,2和3被解释为具有1的Ax和Ay值。

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

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

1 个答案:

答案 0 :(得分:2)

没有理由更新表格,这是我建议你不要走的路径。
该表用于存储数据,而不是处理数据 您正在寻找的是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

我明白了:

enter image description here