如果在SQL Server中填充了另一列,如何检查该列是否有价值?

时间:2019-05-24 20:35:44

标签: sql sql-server database

我正在尝试寻找一种方法,看看是否可以编写查询表的查询以返回任何缺少依赖项的行(如果有意义)。例如,假设我有以下几列:

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 个答案:

答案 0 :(得分:1)

您似乎想要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)
            )
          );

答案 1 :(得分:1)

好吧,只要再读一遍,对不起,我的手机上却有这样的内容...

选择*从#DataTable 哪里 EffectiveDate不为null,并且(Change1为null或Change2为null或Change3为null) 要么 (Change1不为空,EffectiveDate为空) 要么 (Change2不为空,EffectiveDate为空) 要么 (Change3不为空,EffectiveDate为空)

答案 2 :(得分:1)

要直接回答您的问题,我认为这是获得所需结果的一种干净方法。

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))

答案 3 :(得分:0)

不太清楚您要求的内容是否可以提供一些示例数据集,这样可以使您想做的事情更加清楚?