我目前有一条select语句,该语句检查几列以查看它们是否有数据。如果它们中的任何一个为null,那么我想将其设置为false。如果它们都不为空,那么我想将其设置为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

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

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

最佳答案

只需将它们加起来即可,因为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

来自我3年前创建的post ...

请记住,如果您的字符不是数字,则必须转换为varchar ...
INSERT #test VALUES(0,'abc',null)

这是转换,无需转换varchar列
SELECT CASE WHEN CONVERT(VARCHAR(100),column1)
            + column2
            +CONVERT(VARCHAR(100),column3)  is NULL THEN 0 ELSE 1 END,*
 FROM #test

关于sql-server - 确定任何值是否为null,如果为true,则为false,否则为true,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6116185/

10-12 01:24