确定是否有任何值为null,如果为true则为false,否则为true

DFo*_*k42 8 t-sql sql-server sql-server-2008

我目前有一个select语句,它检查几列以查看它们是否有数据.如果它们中的任何一个为null,那么我想要一个设置为false.如果它们都不为null,那么我想要一个设置为true.这是我现在拥有的:

select
cast(
        case when ChangeOrderNumber is null then 0 else 1 end *
        case when ClientName is null then 0 else 1 end *
        case when QuoteNumber  is null then 0 else 1 end *
        case when ClientNumber is null then 0 else 1 end *
        case when ServiceLine is null then 0 else 1 end *
        case when ServiceLineCode is null then 0 else 1 end *
        case when GroupLeader is null then 0 else 1 end *
        case when CreatedBy is null then 0 else 1 end *
        case when PTWCompletionDate is null then 0 else 1 end *
        case when BudgetedHours is null then 0 else 1 end *
        case when BudgetDollars is null then 0 else 1 end *
        case when InternalDeadlineDate is null then 0 else 1 end *
        case when ProjectDescription is null then 0 else 1 end *
        case when Sales is null then 0 else 1 end *
        case when Coop is null then 0 else 1 end *
        case when PassThrough is null then 0 else 1 end *
        case when POStatus is null then 0 else 1 end *
        case when PONumber is null then 0 else 1 end as bit
    ) 
    as Flag
from t
Run Code Online (Sandbox Code Playgroud)

现在,该代码有效,但它有点冗长,我想知道是否有人知道更好的方法来做到这一点.请注意,有几种数据类型正在检查中.

更多详细信息:此代码位于应用程序中用于处理变更单的视图中.在处理变更单之前,它必须满足一些数据质量检查.此视图显示是否有任何所需数据为空.

SQL*_*ace 11

只需添加它们,因为NULL +"something"总是NULL ...

CREATE TABLE #test(column1 int,column2 varchar(4),column3 float)

INSERT #test VALUES(2,'2',2)
INSERT #test VALUES(0,'1',0)
INSERT #test VALUES(null,'1',0)
INSERT #test VALUES(1,null,0)
INSERT #test VALUES(0,'1',null)
INSERT #test VALUES(null,null,null)

SELECT CASE 
WHEN column1 + column2 + column3 is NULL THEN 0 ELSE 1 END, *
FROM #test
Run Code Online (Sandbox Code Playgroud)

从我3年前创建的帖子中 ...

请记住,如果您的字符不是必须转换为的数字varchar...

INSERT #test VALUES(0,'abc',null)
Run Code Online (Sandbox Code Playgroud)

这是转换,无需转换varchar列

SELECT CASE WHEN CONVERT(VARCHAR(100),column1) 
            + column2 
            +CONVERT(VARCHAR(100),column3)  is NULL THEN 0 ELSE 1 END,*
 FROM #test
Run Code Online (Sandbox Code Playgroud)


DFo*_*k42 5

我想我可能会选择这个解决方案,除非有人想出一个更好的解决方案,受到@Alireza的启发:

cast(
        case when (ChangeOrderNumber is null  or
        a.ClientName is null  or
        a.QuoteNumber  is null  or
        ClientNumber is null  or
        ServiceLine is null  or
        ServiceLineCode is null  or
        GroupLeader is null  or
        CreatedBy is null  or
        PTWCompletionDate is null  or
        BudgetedHours is null  or
        BudgetDollars is null  or
        InternalDeadlineDate is null  or
        ProjectDescription is null  or
        Sales is null  or
        Coop is null  or
        PassThrough is null  or
        POStatus is null  or
        PONumber is null) then 'false' else 'true'
        end as bit) as Flag
Run Code Online (Sandbox Code Playgroud)