Sql server 2012 返回重复行的CASE语句。我只想要每条记录一行

Sql server 2012 返回重复行的CASE语句。我只想要每条记录一行,sql-server-2012,case,duplicate-removal,Sql Server 2012,Case,Duplicate Removal,下面的CASE语句返回2行,如果此人是成员,则返回1行joindate=到加入日期(cd.user_d1),如果记录上没有加入日期,则返回null。如何使CASE语句只返回joindate字段为null或成员的joindate的1行 我已经搜索并找到了其他类型的SUM字段的解决方案,但是没有找到日期字段的解决方案。任何帮助都将不胜感激 SELECT DISTINCT c.master_customer_id , c.SUB_CUSTOMER_ID ,

下面的CASE语句返回2行,如果此人是成员,则返回1行joindate=到加入日期(cd.user_d1),如果记录上没有加入日期,则返回null。如何使CASE语句只返回joindate字段为null或成员的joindate的1行

我已经搜索并找到了其他类型的SUM字段的解决方案,但是没有找到日期字段的解决方案。任何帮助都将不胜感激

SELECT DISTINCT
        c.master_customer_id ,
        c.SUB_CUSTOMER_ID ,
        c.PRIMARY_EMAIL_ADDRESS ,
        c.FIRST_NAME ,
        c.INFORMAL_SALUTATION ,
        c.LAST_NAME ,
        c.LABEL_NAME ,
        c.PRIMARY_JOB_TITLE ,
        cad.company_name ,
        ca.ADDRESS_1 ,
        ca.ADDRESS_2 ,
        ca.ADDRESS_3 ,
        ca.ADDRESS_4 ,
        ca.CITY ,
        ca.STATE ,
        ca.POSTAL_CODE ,
        ca.COUNTRY_DESCR ,
        c.PRIMARY_URL ,
        c.BIRTH_DATE ,
        CASE WHEN cd.DEMOGRAPHIC_SUBCODE = 'join_date'
                  AND cd.user_d1 IS NOT NULL THEN cd.USER_D1
             ELSE NULL
        END AS JOINDATE ,
        CASE WHEN cc.comm_type_code = 'EMAIL'
                  AND cc.primary_flag <> 'Y' THEN cc.formatted_phone_address
        END AS secondary_email
FROM    customer c
        LEFT OUTER JOIN CUS_DEMOGRAPHIC cd ON cd.MASTER_CUSTOMER_ID = c.MASTER_CUSTOMER_ID
        LEFT OUTER JOIN CUS_ADDRESS ca ON ca.MASTER_CUSTOMER_ID = c.MASTER_CUSTOMER_ID
        LEFT OUTER JOIN CUS_ADDRESS_DETAIL cad ON cad.CUS_ADDRESS_ID = ca.CUS_ADDRESS_ID
        LEFT OUTER JOIN CUS_COMMUNICATION cc ON cc.MASTER_CUSTOMER_ID = c.MASTER_CUSTOMER_ID
WHERE   c.CUSTOMER_STATUS_CODE = 'active'
        AND c.ALLOW_EMAIL_FLAG = 'Y'
        AND cad.PRIORITY_SEQ = 0
        AND c.PRIMARY_EMAIL_ADDRESS <> ' '
ORDER BY c.MASTER_CUSTOMER_ID
选择DISTINCT
c、 主客户id,
c、 子客户ID,
c、 主要电子邮件地址,
c、 名字,
c、 非正式的问候,
c、 姓,
c、 标签名称,
c、 主要职务,
cad.公司名称,
ca.ADDRESS_1,
ca.ADDRESS_2,
ca.ADDRESS_3,
ca.ADDRESS_4,
加州城市,
加利福尼亚州,
ca.邮政编码,
约国家/地区,
c、 主URL,
c、 出生日期,
cd.DEMOGRAPHIC_子代码='join_date'时的情况
并且cd.user_d1不为空,则cd.user_d1为空
否则无效
截止日期:,
cc.comm_type_code='EMAIL'时的情况
和cc.primary_标志“Y”,然后是cc.formatted_phone_地址
以第二封电子邮件结束
来自客户c
左侧外部连接用户统计cd上的cd.MASTER\u客户\u ID=c.MASTER\u客户\u ID
左外部连接客户地址ca在ca.MASTER\u客户\u ID=c.MASTER\u客户\u ID上
左外连接用户地址详细信息cad上的cad.CUS\U地址\U ID=ca.CUS\U地址\U ID
左侧外部连接客户通信cc ON cc.MASTER\u CUSTOMER\u ID=c.MASTER\u CUSTOMER\u ID
其中c.CUSTOMER\u STATUS\u CODE='active'
和c.ALLOW_EMAIL_FLAG='Y'
和cad.PRIORITY_SEQ=0
和c.主要电子邮件地址“
由c.MASTER\u客户\u ID订购

我不确定我是否认为
案例与您的问题有关联。您的问题是否更多地涉及到您对
左外连接的使用
。我们有许多cd.u子代码,所以我不想将该字段拉入select语句,因为它将返回多行。因此,我认为根据案例标准创建joindate字段,并将其拉入select语句将限制每个记录的行数为1。我选择left outer是因为我们的一些客户记录没有地址信息,只有电子邮件。因此,我认为这将确保客户表中的所有记录都将被提取,而不管它们是否具有地址信息。我怀疑某处存在重复记录,最好的办法是分解查询,并检查表中的重复条目。