表A b和c中有三列。如果a不为null,那么我想返回a但是如果它为null我想返回b + c。
我原以为
Select Coalesce(a, b + c) from table1
会做的伎俩,但似乎并没有暗示我的语法错误。我尝试的每个变体似乎仍然会返回列a的空值,因为它应该返回b&的串联。 c因为a为null。我欢迎你的帮助。
我认为语法是正确的,但这是Coalesce的错误使用。
两列三列:
Fred Flinstone Tyres Fred Flinstone
Norman Greembaum Norman Greenbaum
NULL Dave Collins
NULL 2 3
4 5 6
8 6 8
NULL 2 7
对不起,第二种格式不是很好,但它应该足够了。在使用int数据类型时,Coalesce似乎与下表一起使用,但在使用nvarchar时,它不适用于top。通常当然这是我感兴趣的顶级桌子,我希望Dave Collins回到第3排。
答案 0 :(得分:4)
简单的ISNULL(a,b + c)也会这样做,另外它也是SQL标准 连接
ISNULL(a, CAST(b as varchar) + CAST(c as Varchar))
算术
ISNULL(a, ISNULL(b, 0) + ISNULL(c, 0))
答案 1 :(得分:0)
检查'b'和'c',我认为其中一个是null,因为如果你将1 + null加起来,它将为null
答案 2 :(得分:0)
使用
SELECT COALESCE(a, b + c, b, c) FROM table1
或
SELECT COALESCE(a, IsNull(b + c,0)) FROM table1
然后你得到一个肯定不是null的值。在您的情况下,您的值可能为null。另请查看http://msdn.microsoft.com/en-us/library/ms190349.aspx
更新:
DECLARE @table TABLE(a int, b int, c int);
INSERT INTO @table (a,b,c) VALUES (null, 1, 2);
INSERT INTO @table (a,b,c) VALUES (null, 2, 2);
INSERT INTO @table (a,b,c) VALUES (1, 3, 2);
INSERT INTO @table (a,b,c) VALUES (2, 4, 2);
SELECT COALESCE(a,b+c) FROM @table
结果:
3 4 1 2
正如所料。
答案 3 :(得分:0)
如果有变化,A或B可能为NULL;
ISNULL(a, ISNULL(b + c), 0)
或者
COALESCE(a, b + c, 0)
答案 4 :(得分:-1)
从TABLE1中选择COALESCE(A,B + C) 表1和表A,B,C表 如果(A = NULL)的值,如果(B或C)的值为NULL,那么它将返回空值 表
a b c
1 2 3 1 NULL 3 2 NULL 3 2 NULL 4 NULL 2 4 NULL 2 NULL
之后,从table1中选择合并(a,b + c)
1 1 2 2 6 NULL