是否可以将WHERE仅应用于SQL Server中的1列?

tsd*_*ter 0 sql sql-server where-clause sql-server-2008

我有以下数据:

tblBio

bio        bioid
some data  1
some data  2
Run Code Online (Sandbox Code Playgroud)

tblContact

email        email_pub    bioid
me@me.com    1            1
you@me.com   0            2
Run Code Online (Sandbox Code Playgroud)

我需要选择

bio + 'email: ' + email WHERE email_pub = 1
Run Code Online (Sandbox Code Playgroud)

我目前有:

SELECT b.bio + 'Email: ' + COALESCE(c.email, '')
FROM tblbio b
INNER JOIN tblContact c ON b.bioid = c.bioid
WHERE c.email_pub = 1
AND b.bioid = 1
Run Code Online (Sandbox Code Playgroud)

但是,我总是需要选择bio然后将文本'email:'以及电子邮件地址附加到最后,如果email_pub设置为1.拥有'WHERE email_pub = 1'使得如果email_pub为0然后没有选择.

同样,即使没有发布的电子邮件,也会始终显示"电子邮件:"文本.

谢谢,

托马斯

JNK*_*JNK 6

这是一个需要调用的场景CASE- CASE用于表达式的内联评估.

SELECT b.bio + 'Email: ' + CASE WHEN email_pub=1 THEN COALESCE(c.email, '') ELSE '' END
FROM tblbio b
INNER JOIN tblContact c ON b.bioid = c.bioid
WHERE b.bioid = 1
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 5

使用CASE:

SELECT b.bio + case when email_pub = 1 then 'Email: ' + COALESCE(c.email, '') else '' end
FROM tblbio b
INNER JOIN tblContact c ON b.bioid = c.bioid
WHERE b.bioid = 1
Run Code Online (Sandbox Code Playgroud)