首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正确使用Coalesce

正确使用Coalesce
EN

Stack Overflow用户
提问于 2013-01-11 16:00:09
回答 5查看 210关注 0票数 0

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

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

我认为语法是正确的,但这是对Coalesce的错误使用。

包含三列的两个表:

代码语言:javascript
运行
复制
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行。

EN

回答 5

Stack Overflow用户

发布于 2013-01-11 16:47:21

简单的ISNULL(a,SQL )就可以了,另外它的b+c标准也用于连接

代码语言:javascript
运行
复制
ISNULL(a, CAST(b as varchar) + CAST(c as Varchar))

算术的ANd

代码语言:javascript
运行
复制
ISNULL(a, ISNULL(b, 0) + ISNULL(c, 0))
票数 3
EN

Stack Overflow用户

发布于 2013-01-11 16:04:04

检查'b‘和'c',我认为其中一个是null,因为如果你求1+ null,它就是null

票数 0
EN

Stack Overflow用户

发布于 2013-01-11 16:08:46

使用

代码语言:javascript
运行
复制
SELECT COALESCE(a, b + c, b, c) FROM table1

代码语言:javascript
运行
复制
SELECT COALESCE(a, IsNull(b + c,0)) FROM table1

然后你肯定会得到一个不为空的值。在你的例子中,你的值中的一个可能是空的。另请检查http://msdn.microsoft.com/en-us/library/ms190349.aspx

更新:

代码语言:javascript
运行
复制
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

不出所料。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14273968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档