【发布时间】:2015-04-06 23:09:16
【问题描述】:
样本数据
userid email_address login_name name Title org phone_number_com
============= ========================== =============== ================== ========== ============= ===================
1192 Steve.Jobs@apple.com sjobs Steve Jobs CEO Apple N/A
1274 Steve.Jobs@apple.com sjobs Steve Jobs CFO Apple 697-4686
1192 Steven.jobs@apple.com sjobs Steven jobs CEO Apple 604-7126
1885 Bill.Gates@microsoft.com bgates Bill Gates CEO Microsoft 604-7114
1920 Bill.Gates@microsoft.com bgates William Gates CTR Microsoft 604-7247
1951 Warren.Buffet@hp.com wbuffet Warren Buffet CEO HP 614-9141
1954 Warren.Buffet@hp.com wbuffet W. Buffet COO HP 614-7589
1951 Warren.Buffet@xerox.com wbuffet Warren S Buffet CIO Xerox 614-8874
1956 Mark.Zuckerberg@fb.com mzuck Mark Zuckerberg CEO FB 614-8295
查询
SELECT *
FROM
(
SELECT userid, name, login_name, email_address, phone_number_com,
ROW_NUMBER() OVER(PARTITION BY [login_name] ORDER BY login_name) Num_Duplicates
FROM web_user
) as Rows
WHERE Num_Duplicates > 1
这是我的第一篇文章,希望我遵循所有程序。我得到一个结果集,其中显示了重复的第二行和第三行。我正在尝试GROUP BY login_name 并且只显示具有最高Num_Duplicates 的行。如果 login_name 的 Num_Duplicates 为 2 和 3,则仅显示 3 的行。我希望这是有道理的!提前感谢您提供的任何指导。
这些是我希望查询输出的结果:
userid | email_address | login_name | name | Title | org phone_number_com | Num_Duplicates
1192 | Steve.Jobs@apple.com | sjobs | Steve Jobs | CEO | Apple | N/A | 3
1885 | Bill.Gates@microsoft.com | bgates | Bill Gates | CEO | Microsoft | 604-7114 | 2
1951 | Warren.Buffet@hp.com | wbuffet | Warren Buffet | CEO | HP | 614-9149 | 3
【问题讨论】:
-
为什么需要行号?
-
你会添加你想要的结果吗?
-
为什么只显示第三个?您正在按 login_name 进行分组和排序,这意味着每个组中的顺序是任意的,并且每次执行时都可能不同。所以1、2、3..它们都是一样的。为什么只显示3?为什么不只显示 2 或只显示 1?
-
让我们备份并找出您所追求的。您是否只是在列出所有“基于 login_name 的重复项”并显示 3 条记录中的任何一条的字段?
-
对不起,是的,我毕竟是重复的 login_name,只需要显示任何记录中的一个字段,无论是 2 还是 3。
标签: sql sql-server sql-server-2008