首页 > 解决方案 > 在同一个表的列中返回具有唯一值的行

问题描述

我有这样的数据:

代码 电子邮件0 电子邮件1 电子邮件2 电子邮件3 电子邮件4 电子邮件5 电子邮件6
美国广播公司 abc@gmail.com q@gmail.com q@gmail.com f@gmail.com h@gmail.com u@gmail.com y@gmail.com
国防军 def@gmail.com k@gmail.com 无效的 无效的 无效的 无效的 g@gmail.com
XYZ xyz@gmail.com i@gmail.com i@gmail.com 无效的 无效的 无效的 无效的

我需要查询只返回带有 的第二行CODE=DEF,因为EMAIL1toEMAIL6都是唯一值。

基本上我需要具有唯一值的行EMAIL1to EMAIL6。这里CODE永远是独一无二的。

我试过了,CROSS JOIN但没有成功。

标签: sqlsql-servercountdistinctlateral-join

解决方案


如果您想要没有重复电子邮件的行,您可以将电子邮件取消透视到横向连接中的行,然后将不同非null值的计数与非null值的计数进行比较:

select t.*
from mytable t
cross apply (
    select count(distinct email) cnt1, count(email) cnt2
    from (values (email0), (email1), ...) as x(email)
) x
where x.cnt1 = x.cnt2

推荐阅读