2015-12-06 5 views
0

Мы в следующей таблице (заполняется из экстракта данных из отдельной таблицы) с 3-мя полями:Подставляя NULLS

содержимое таблицы (/ Содержание исходного источника данных) строго контролируются таким образом, что, в то время как значения Null могут присутствовать либо в Ax, либо в Ay, они никогда не будут присутствовать в обоих.

Запись 1,2 и 3 являются одинаковыми по отношению к следующему согласованному правилу: «Если Нулевое значение присутствует, то значение в поле ввода в должно быть взято из соседнего ненулевого/Ax Ay» При этом, Записи 1,2 и 3 интерпретируются как имеющие значения Ax и Ay 1.

В настоящее время при выполнении анализа данных все sql-конструкции должны учитывать возможное наличие Nulls, при этом итоговый результат состоит в том, что сложность/количество sql условия, подлежащие проверке, увеличиваются, что также приводит к увеличению риска возникновения человеческой ошибки. Эти риски усиливаются в реальной таблице, которая содержит гораздо больше аналогичных пар полей, где могут применяться аналогичные правила. Поскольку все анализ смотрит только на таблицу извлечения данных, а не исходные данные/источник ...

-> было бы приемлемой практикой в этом случае предварительно подготовить/изменить таблицу с помощью экстракта UPDATE, чтобы заполнить все такие встреченные значения Null с соответствующим соседним полем? ... с целью упрощения записи/чтения, возможно, более эффективного/быстрого выполнения 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 Доступ - я не думаю, что Views поддерживаются. Однако, может ли это (обновление использования в моем исходном сообщении) когда-либо классифицироваться как «очистка данных», поскольку мы готовим таблицу для анализа, а эта таблица является копией из исходного источника данных? – Jim

+0

Я думаю, что MS Access [поддерживает представления] (https://msdn.microsoft.com/en-us/library/office/ff836312.aspx) –

+0

Что касается вашего вопроса, я думаю, что имеет смысл делать «дезинфекцию» 'при вставке данных. Избегайте хранения данных в форме, которая вам не подходит (это звучит так, как будто это ваш случай ...) –

Смежные вопросы