2010-04-16 43 views
4

考虑我有一个user表,我有三列mobilePhonehomePhoneworkPhone ...SQL查询来得到这样的结果

我必须选择homePhone为每个用户作为第一PREF
如果没有价值
     我会去mobilePhone
     如果它
没有价值         我会去workPhone ....

任何建议如何在MySQL中可完成..

回答

7

尝试使用SQL Server COALESCE (Transact-SQL)

返回第一个非空表达式 之间的论点。

也是一样的MySql COALESCE(value,...)

如果没有 非NULL值返回 的第一个非NULL值的列表,或NULL。

喜欢的东西

SELECT COALESCE(homePhone, mobilePhone, workPhone) ContactPhone 
FROM Users 
+0

@astander在mysql中非常抱歉... – bala3569 2010-04-16 04:41:05

+0

Mysql还提供了COALESCE – 2010-04-16 04:43:25

3

你想要Coalesce函数返回第一个非空值:

Select Coalesce(homephone, mobilephone, workphone) Phone 
From `user` 

合并并在MySQL存在。它是ANSI定义的函数。

Coalesce function (MySQL).

+1

@Thomas和@astander在mysql中对不起 – bala3569 2010-04-16 04:40:36

0
SELECT user, homePhone 
FROM user 
WHERE homePhone != '' 

UNION 

SELECT user, mobilePhone 
FROM user 
WHERE homePhone = '' AND mobilePhone != '' 

UNION 

SELECT user, workPhone 
FROM user 
WHERE homePhone = '' AND mobilePhone = '' 
0

可以使用嵌套IF陈述或者CASE或使用业务逻辑层

0

另一种方法是使用下面的SQL做好这项工作:

ISNULL(ISNULL(HomePhone,MobilePhone),WorkPhone) AS Phone 

谢谢, Nirmal