表A、b和c中有三列,如果a不为null,那么我想返回a,但是如果a为null,我想返回b+ c。
我曾认为Select Coalesce(a, b + c) from table1可以解决这个问题,但似乎没有,这表明我的语法是错误的。我尝试的每个变体似乎仍然返回列a的空值,而它应该返回b&c的串联,因为a是空的。我很欢迎你的帮助。
我认为语法是正确的,但这是对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时,则不适用于最上面的表。通常情况下,这是我感兴趣的顶层表格,我希望Dave Collins返回到第3行。
发布于 2013-01-11 16:47:21
简单的ISNULL(a,SQL )就可以了,另外它的b+c标准也用于连接
ISNULL(a, CAST(b as varchar) + CAST(c as Varchar))算术的ANd
ISNULL(a, ISNULL(b, 0) + ISNULL(c, 0))发布于 2013-01-11 16:04:04
检查'b‘和'c',我认为其中一个是null,因为如果你求1+ null,它就是null
发布于 2013-01-11 16:08:46
使用
SELECT COALESCE(a, b + c, b, c) FROM table1或
SELECT COALESCE(a, IsNull(b + c,0)) FROM table1然后你肯定会得到一个不为空的值。在你的例子中,你的值中的一个可能是空的。另请检查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
不出所料。
https://stackoverflow.com/questions/14273968
复制相似问题