我的查询看起来有点像这样:
select
records.id,
contacts.name + ' (' + contacts.organization + ')' as contact,
from records
left join contacts on records.contact = contacts.contactid
问题是 - contacts.organization
经常是空的,我得到像“John Smith()”这样的联系人。如果组织非空,是否有办法只连接组织?
答案 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是您更通用的工具。但是使用特定的功能将使您的代码更清晰,或者至少更简洁。