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

时间:2018-10-09 11:51:37

标签: 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

我的查询

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

谢谢

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

使用COALESCE函数将返回第一个非空值

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