Как проверить, имеет ли столбец значение, если в SQL Server заполнен другой столбец? - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь найти способ проверить, могу ли я написать запрос для проверки таблицы, чтобы она возвращала любую строку, в которой отсутствует зависимость, если это имеет смысл. Например, допустим, у меня есть следующие столбцы:

EffectiveDate    Change1    Change2    Change3

Если EffectiveDate имеет значение, то либо Change1, Change2, либо Change3 также должны иметь значение, поскольку EffectiveDate имеет значение. И наоборот, если столбцы Change1, Change2 или Change3 имеют значение, то EffectiveDate должно иметь значение.

Мне нужен запрос, чтобы вернуть все строки, которые не соответствуют вышеуказанным критериям, и показать столбцы как NULL, чтобы я знал, какие записи нужно ввести, чтобы исправить пропущенные значения.

Пока у меня есть только нижеследующее, это немного, но я не могу собрать здесь логику. Я предполагаю, что мне понадобятся вложенные операторы CASE?:

SELECT employee, 
    EffectiveDate, 
    Change1, 
    Change2, 
    Change3, 
    CASE WHEN EffectiveDate IS NOT NULL OR EffectiveDate != '' 
    THEN ...
FROM table1 

Ответы [ 4 ]

1 голос
/ 25 мая 2019

Чтобы прямо ответить на ваш вопрос, я думаю, что это чистый способ получить желаемые результаты.

SELECT EffectiveDate,
   Change1,
   Change2,
   Change3 
FROM dbo.Table1
WHERE (EffectiveDate IS NULL AND (Change1 IS NOT NULL OR Change2 IS NOT NULL OR 
Change3 IS NOT NULL))
OR (EffectiveDate IS NOT NULL AND (Change1 IS NULL AND Change2 IS NULL AND Change3 IS 
NULL))
1 голос
/ 24 мая 2019

Хорошо, просто прочитайте это еще раз, извините на моем телефоне, но что-то вроде этого ...

Выберите * Из #DataTable, где EffectiveDate не равен NULL и (Change1 равен нулю или Change2 равен нулю или Change3 равен нулю)Или (изменение1 не равно нулю, а эффективная дата равна нулю) или (изменение2 не равно нулю, а эффективная дата равна нулю) или (изменение3 не равно нулю, а эффективная дата равна нулю)

1 голос
/ 24 мая 2019

Вы, похоже, хотите ограничение check:

alter table table1 add constraint chk_effectivedate_changes
    check ( (EffectiveDate is null and Change1 is null and   Change2 is null and Change3 is null) or
            (EffectiveDate is not null and (Change1 is not null or Change2 is not null or Change3 is not null)
            )
          );
0 голосов
/ 24 мая 2019

Не совсем уверен, что вы просите, чтобы быть честным, не могли бы вы предоставить некоторые примеры наборов данных, которые могут прояснить то, что вы пытаетесь сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...