正确使用聚结

时间:2013-01-11 08:00:09

标签: sql sql-server

表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排。

5 个答案:

答案 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