2009-09-23 61 views
2

我在想,如果这样的事情是可能的:SQL内联有条件在选择

SELECT name or alt_name FROM users Where userid=somenum 

我也试过这样:

SELECT name IF NOT NULL ELSE alt_name ... 

如果任何人有任何了解我会很感激的。

+0

感谢,由于某种原因,当我尝试提出问题时,工作时间的网络在这里,所以我不得不在我的iPhone上输入它...... – 2009-09-23 15:29:18

+0

也就是说,网络导致页面超时...大声笑 – 2009-09-23 15:29:48

回答

7

如果您想更换空然后

select coalesce(name,alt_name).... 

它将返回第一个非空值

0

不是最有效的答案,但对于这一点:

SELECT name FROM users WHERE userid=somenum AND name IS NOT NULL 
UNION 
SELECT altname FROM users WHERE userid=somenum AND name IS NULL 

我认为这会产生你所追求的。

0

如果你使用的是支持他们,那么最简单的方式之一数据库使用用户定义的函数,你再有

SELECT udfPreferredName() FROM users 

其中udfPreferredName()将封装名称和alternative_name领域之间进行选择所需的逻辑。

使用函数的一个优点是,您可以抽象出选择逻辑并将其应用于多个SQL语句中的任何需要的地方。使用案例进行内联逻辑很好,但通常会在整个系统中更难以维护。在大多数RDBMS中的函数调用的额外开销不会显著,除非你正在处理非常大的表

0

SELECT CASE 当userid和= somenum然后命名 ELSE alt_name END 来自用户的

1

你的意思是什么喜欢这个?我假设TSQL

SELECT CASE WHEN [name] IS NOT NULL THEN [name] ELSE [alt_name] END AS [UserName] 
FROM [Users] WHERE [UserId] = somenum 
2

这个怎么样?

SELECT IsNull(name, alt_name) FROM users Where userid=somenum 

它与Coalesce函数类似,但它只需要两个参数并且更容易拼写。