根据表中的记录删除查询结果

时间:2019-02-06 18:15:51

标签: sql sql-server

我正在运行一个简单的查询,以从“地址”表中提取地址,还有一个附加的“人口统计”表,该表具有一个名为FieldName的字段,该字段可能具有“ DoNotMail”的可能值,该值更多是字段标签。同一张表中还有一个名为ValueString的字段,该字段可能具有DontMail的关联值,该值是该字段的实际值。

我有一个case语句,可以从该人口统计表中仅提取那些与DoNotMail值相关的数据。也许有更好的方法在where子句中使用它?

SELECT DISTINCT 
                      CASE WHEN CUSTOMV.FieldName = 'do_not_mail_options' Then CUSTOMV.ValueString Else Null END as DoNotMail,
                      IND.RecordNumber,  
                      ADDR.Line1, ADDR.Line2, ADDR.Line3,
                      ADDR.City, 
                     ADDR.StateName, 
                     AddressZipCode = ADDR.Zip,
                     AddressCountry = ADDR.CountryName, 
                     FirstName = Replace(IND.FirstName,',','-'), LastName = Replace(IND.LastName,',',''), AddressIsPreferredBilling = ADDR.IsPreferredBilling, 
                     ADDR.IsPreferredShipping
FROM            Crm.Individual IND WITH (NOLOCK) 
                     LEFT JOIN
                     Crm.CustomerAddress ADDR WITH (NOLOCK) ON IND.contactID = ADDR.ContactId AND ADDR.IsDeleted != '1' 
                     Left Join
                     crm.CustomFieldValue as CUSTOMV on CUSTOMV.ContactId = Ind.ContactId
WHERE       ADDR.IsPrimary = '1' 

结果

+-----------+--------------+
| DoNotMail | RecordNumber |
+-----------+--------------+
| NULL      |     00000036 |
| NULL      |      9757035 |
| DontMail  |      9757035 |
+-----------+--------------+

当我链接两个表并提取地址时,对于拥有DoNotMail的任何人,我得到2条记录。一个记录的DoNotMail字段为Null,另一条记录的DoNotMail字段为“ DontMail”,否则其余重复。这应该只是1条记录,因此我可以对它们进行排序,然后在excel中将其删除。或者,如果可能的话,请忽略那些不在查询中直接发送邮件的人。

2 个答案:

答案 0 :(得分:2)

如果您只想为“ do_not_mail”选择ValueString,那么

  select ValueString from t where FieldName = 'do_not_mail';

答案 1 :(得分:0)

我能够找出自己的解决方案,对所有人造成的所有混乱感到抱歉。我为where子句创建了一个子查询,以仅提取不在此子查询中的ID。谢谢大家的指导,将想法相互融合会很有帮助。

SELECT DISTINCT 
                      IND.RecordNumber
FROM            Crm.Individual IND WITH (NOLOCK) 
                     Left Join
                     crm.CustomFieldValue as CUSTOMV on CUSTOMV.ContactId = Ind.ContactId
WHERE       
        CUSTOMV.FieldName = 'do_not_mail_options'