Sql 如果列的值为NULL或空白,则显示其他列的值

Sql 如果列的值为NULL或空白,则显示其他列的值,sql,sql-server,Sql,Sql Server,如果我的列的值为NULL或空白,我希望显示其他列的值。下面是我的桌子 DECLARE @Tab TABLE(ID INT, suser VARCHAR(10), sgroup VARCHAR(10), sregion VARCHAR(10)) INSERT INTO @Tab VALUES(1,'Test',NULL,NULL),(2,'','Group',NULL),(3,NULL,NULL,'Region'),(4,NULL,NULL,NULL) SELECT * from @Tab

如果我的列的值为NULL或空白,我希望显示其他列的值。下面是我的桌子

DECLARE @Tab TABLE(ID INT, suser VARCHAR(10), sgroup VARCHAR(10), sregion VARCHAR(10))
INSERT INTO  @Tab VALUES(1,'Test',NULL,NULL),(2,'','Group',NULL),(3,NULL,NULL,'Region'),(4,NULL,NULL,NULL)

SELECT * from @Tab
我的问题是:

SELECT ID 
,Case WHEN suser IS NULL OR suser = ''
            THEN sgroup
      WHEN sgroup IS NULL OR sgroup = ''
            THEN sregion
     ELSE NULL
     END AS col 
            from @Tab
我想说:-

DECLARE @Tab1 TABLE(ID INT, col VARCHAR(10))
INSERT INTO  @Tab1 VALUES(1,'Test'),(2,'Group'),(3,'Region'),(4,NULL)
SELECT * from @Tab1

感谢使用COALESCE函数,它将返回第一个非空值

 SELECT ID ,COALESCE(suser , sgroup, sregion)     
          col 
       from @Tab

空白和
NULL
不相同。如果要将
'
NULL
视为相同的值,一种方法是使用
NULL如果

ISNULL(NULLIF(YourFirstColumn,''),YourOtherColumn)
但是,理想情况下,如果其中一个可以存储在数据中,但它们应该被视为相同的,则不允许使用其中一个。就我个人而言,我会将列的所有值更新为
NULL
,其中它们的值为
'
,然后添加一个不允许值
'
的约束。比如:

UPDATE YourTable
SET YourColumn = NULL
WHERE YourColumn = '';

ALTER TABLE YourTable ADD CONSTRAINT YourColumn_NotBlank CHECK (YourColumn IS NULL OR YourColumn <> '');
更新您的表
设置YourColumn=NULL
其中YourColumn='';
ALTER TABLE YourTable ADD CONSTRAINT YOURCLUMN_NOT空白检查(YOURCLUMN为NULL或YOURCLUMN“”);

这不能处理空白字符串(<代码>”/代码>。惊讶这被标记为正确答案,考虑到这不能提供预期的结果。对于ID 2,返回值为
'
。OP的预期结果清楚地表明他们预期值
'Group'
。您的约束将接受空值。我想你的意思是你的列不是空的,你的列''@t-clausen.dk不,这正是我想要的。“如果其中一个可以存储在您的数据中,但它们应被视为相同的,则不允许其中一个”。因此,在我的示例中,我允许
NULL
,但不允许空白字符串
'
。OP显然至少需要一个,因为它们都有
NULL
'
值,所以不允许两者都有可能会带来破坏性的变化。但是,如果我想停止
NULL
,那么更改列的定义会更好。即,
ALTER TABLE YourTable ALTER COLUMN yourtcolumn varchar(x)不为空(其中x为当前长度)