如果我的列的值为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
谢谢
答案 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