transact-sql选择列列表中的条件

时间:2009-06-26 15:16:17

标签: sql tsql

我的查询看起来有点像这样:

select
records.id,
contacts.name + ' (' + contacts.organization + ')' as contact,
from records
left join contacts on records.contact = contacts.contactid

问题是 - contacts.organization经常是空的,我得到像“John Smith()”这样的联系人。如果组织非空,是否有办法只连接组织?

5 个答案:

答案 0 :(得分:2)

使用CASE声明

SELECT
records.id,
CASE contacts.organization
    WHEN '' THEN contacts.name
    ELSE contacts.name + ' (' + contacts.organization + ')'
END as Contact
FROM records
LEFT JOIN contacts ON records.contact = contacts.contactid

您可以修改它以检查NULL值,但我不相信您有这个问题,因为如果您在contacts.organization中有NULL,则整个结果字段将为null而不是空白。

答案 1 :(得分:1)

不确定这是否是最好的方法:

CASE contacts.organization
WHEN '' THEN ''
ELSE '(' + contacts.organzation + ')' END

答案 2 :(得分:1)

使用CASE,例如CASE WHEN contacts.organization not null then'('+ c.o +')'else''end

答案 3 :(得分:0)

由于你的外连接,你总是需要期望空值:

select
records.id,
contacts.name + CASE WHEN contacts.organization IS NULL OR contacts.organization='' THEN '' ELSE ' (' + contacts.organization + ')' END as contact,
from records
left join contacts on records.contact = contacts.contactid

答案 4 :(得分:0)

如果你正在处理NULL值,那么有一些专门用于它们的函数值得了解。

NULLIF()可能是您正在寻找的那个。它基本上需要两个参数。它返回第一个参数,除非它是NULL,否则返回第二个参数。

以下是我对您的代码的近似值:

select
records.id,
contacts.name + ISNULL(' (' + contacts.organization + ')', '') as contact,
from records
left join contacts on records.contact = contacts.contactid

大多数与NULL相关的函数可以用更大的CASE语句替换。 CASE是您更通用的工具。但是使用特定的功能将使您的代码更清晰,或者至少更简洁。