应用规则

Applying a rule

SELECT LTRIM(RTRIM(HOST0149.LOGINID)) AS LOGINID,
       LTRIM(RTRIM(HOST0140.EMAIL)) AS EMAIL,
       LTRIM(RTRIM(HOST0149.USERKEY)) AS ROLE
  FROM HOST0149 LEFT JOIN 
       HOST0140 ON HOST0149.PERSONKEY = HOST0140.PERSONKEY

您好,我正在尝试对电子邮件列的 select 应用规则。有时登录 ID 将是用户的电子邮件地址,如果电子邮件出现在登录 ID 中,我如何应用规则到 return 电子邮件列没有任何内容?任何帮助将不胜感激,谢谢。

我认为 case 表达式可以满足您的要求:

SELECT LOGINID,
       (CASE WHEN LOGINID <> EMAIL THEN EMAIL END) as EMAIL,
       ROLE
FROM (SELECT LTRIM(RTRIM(HOST0149.LOGINID)) AS LOGINID,
             LTRIM(RTRIM(HOST0140.EMAIL)) AS EMAIL,
             LTRIM(RTRIM(HOST0149.USERKEY)) AS ROLE
      FROM HOST0149 LEFT JOIN 
           HOST0140
           ON HOST0149.PERSONKEY = HOST0140.PERSONKEY
     ) hh

CASE...WHEN 应该可以。基本上,您可以明确地处理这两种情况。

SELECT LTRIM(RTRIM(HOST0149.LOGINID)) AS LOGINID,
   CASE WHEN LTRIM(RTRIM(HOST0140.EMAIL)) = LTRIM(RTRIM(HOST0149.LOGINID)) THEN NULL ELSE LTRIM(RTRIM(HOST0140.EMAIL)) END AS EMAIL,
   LTRIM(RTRIM(HOST0149.USERKEY)) AS ROLE
FROM HOST0149 LEFT JOIN 
   HOST0140 ON HOST0149.PERSONKEY = HOST0140.PERSONKEY

这将得到结果:

select LOGINID, EMAIL, ROLE FROM(SELECT LTRIM(RTRIM(HOST0149.LOGINID)) AS LOGINID,
       LTRIM(RTRIM(HOST0140.EMAIL)) AS EMAIL,
       LTRIM(RTRIM(HOST0149.USERKEY)) AS ROLE
  FROM HOST0149 LEFT JOIN 
       HOST0140 ON HOST0149.PERSONKEY = HOST0140.PERSONKEY)
WHERE EMAIL NOT LIKE  '%@%'