我正在运行一个简单的查询,以从“地址”表中提取地址,还有一个附加的“人口统计”表,该表具有一个名为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中将其删除。或者,如果可能的话,请忽略那些不在查询中直接发送邮件的人。
答案 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'