2015-12-06 22 views
0

我們有以下的表(從數據提取物填充從一個單獨的表)具有3個字段:代空值

該表的內容(/原始數據源內容)都嚴格控制,使得而空值可以存在於Ax或Ay中,它們將永遠不會出現在兩者中。

記錄1,2和3關於以下商定的規則是相同的: 「如果存在空值,則該字段條目的值應取自相鄰的非空Ax/Ay」 由此,記錄1,2和3被解釋爲Ax和Ay值爲1.

當前,在執行數據分析時,所有sql結構必須考慮可能存在的空值,結果是sql的複雜性/數目要檢查的條件增加,這也導致引入人爲錯誤的風險增加。這些風險在實際表格中被放大,其中包含許多更類似的字段對,其中可應用類似的規則。 由於所有分析正在僅在提取的數據的表,而不是原始/源數據...

- >會是可接受實踐在這種情況下,以預先準備/通過修改所述提取物表更新填充所有這些遇到的空值與各自的相鄰領域? ...的目的是實現更簡單的寫/讀,也許更有效/更快的執行SQL。

回答

2

沒有理由更新表格,這是我建議你不要走的路徑。
該表用於存儲數據,而不是處理數據。
您正在尋找的是View用於顯示錶格,因爲它可以被看到,包括您對數據所達成的商定規則。

例如,對於下面的代碼(SQL服務器):

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

+0

非常感謝,我不提的是,我們正在使用MS道歉訪問 - 我不認爲視圖被支持。然而,這可能(更新我原來的帖子中的使用情況)可能會被歸類爲'數據清理',因爲我們正在準備分析表,並且此表是來自原始數據源的副本嗎? – Jim

+0

我認爲MS Access [不支持視圖](https://msdn.microsoft.com/en-us/library/office/ff836312.aspx) –

+0

至於你的問題,我認爲更有意義的做'消毒'插入數據後。避免將數據保存在對您無用的表單中(這聽起來像是您的情況......) –