0

我在表 A b 和 c 中有三列。如果a不为null,那么我想返回a,但如果它为null,我想返回b + c。

我原以为这样 Select Coalesce(a, b + c) from table1 可以解决问题,但似乎并不表明我的语法有误。我尝试的每个变体似乎仍然为列 a 返回空值,因为 a 为空,它应该返回 b 和 c 的串联。我欢迎你的帮助。

我认为语法是正确的,但它是 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

抱歉,第二个的格式不太好,但应该足够了。Coalesce 似乎在使用 int 数据类型时适用于下表,但在使用 nvarchar 时不适用于顶部。通常当然这是我感兴趣的顶级表,我希望 Dave Collins 返回第 3 行。

4

5 回答 5

3

只需 ISNULL(a, b+c) 就可以了,此外它的 SQL 标准也用于连接

ISNULL(a, CAST(b as varchar) + CAST(c as Varchar))

和算术

ISNULL(a, ISNULL(b, 0) + ISNULL(c, 0))
于 2013-01-11T08:47:20.730 回答
0

检查'b'和'c',我认为其中一个为null,因为如果你将1 + null相加,它将为null

于 2013-01-11T08:04:03.740 回答
0

如果 A 或 B 可能为 NULL 的变化,那么;

ISNULL(a, ISNULL(b + c), 0)

或者

COALESCE(a, b + c, 0)
于 2013-01-11T08:53:36.677 回答
0

Use

SELECT COALESCE(a, b + c, b, c) FROM table1

or

SELECT COALESCE(a, IsNull(b + c,0)) FROM table1

Then you get a value for sure that is not null. In your case on of your values probably is null. Check also http://msdn.microsoft.com/en-us/library/ms190349.aspx

UPDATE:

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

results in:

3 4 1 2

as expected.

于 2013-01-11T08:08:46.320 回答
-1

从 TABLE1 中选择 COALESCE(A,B+C) 有表 TABLE1 和列 A,B,C 如果 (A=NULL) 的值和 (B OR C) 的值是 NULL 那么它将返回 NULL 值

美国广播公司

1 2 3 1 空 3 2 空 3 2 空 4 空 2 4 空 2 空

之后,从 table1 中选择 coalesce (a,b+c)

1 1 2 2 6 空

于 2013-01-11T08:43:42.420 回答