SQL:如果有多个唯一键,则对应的值应为空

SQL:如果有多个唯一键,则对应的值应为空,sql,Sql,我有一张这样的桌子: email_1 | name_1 | email_2 | name_2 +----------------+----------+---------------------+---------- sandy@name.com | Sandy | sandy@name.com | Sandy sandy@name.com | Sandy | sandy@name.com | Pat c

我有一张这样的桌子:

email_1          | name_1   | email_2             | name_2 
+----------------+----------+---------------------+----------
sandy@name.com   | Sandy    | sandy@name.com      | Sandy 
sandy@name.com   | Sandy    | sandy@name.com      | Pat 
chris@name.com   | Chris    |                     | 
george@name.com  | George   | george@name.com     | Shelly 
george@name.com  | George   | george@name.com     | George 
hank@name.com    | Hank     | hank@name.com       | Barbara
hank@name.com    | Hank     | hank@name.com       | Hank
mikey@name.com   | Mikey    |                     | 
同一个电子邮件地址有多个名称。对于具有多个名称的电子邮件地址,我想创建一个表,列出不同的电子邮件和名称的
Null
。仅附加一个名称的电子邮件将保留该名称

结果表:

email            | name   
+----------------+----------+
sandy@name.com   |          | 
chris@name.com   | Chris    |                      
george@name.com  |          |
hank@name.com    |          |
mikey@name.com   | Mikey    |

我将如何编写查询来执行此操作?

您要取消PIVOT并聚合:

select email,
       (case when min(name) = max(name) then min(name) end) as name
from ((select email_1 as email, name_1 as name from t
      ) union all
      (select email_2 as email, name_2 as name from t
      )
     ) e
group by email;

要取消打印并聚合:

select email,
       (case when min(name) = max(name) then min(name) end) as name
from ((select email_1 as email, name_1 as name from t
      ) union all
      (select email_2 as email, name_2 as name from t
      )
     ) e
group by email;

用你正在使用的数据库标记你的问题。用你正在使用的数据库标记你的问题。