我有一个组织的SQL Server数据库,并且有许多重复的行.我想运行一个select语句来获取所有这些和dupes的数量,但也返回与每个组织关联的id.
声明如下:
SELECT orgName, COUNT(*) AS dupes
FROM organizations
GROUP BY orgName
HAVING (COUNT(*) > 1)
Run Code Online (Sandbox Code Playgroud)
将返回类似的东西
orgName | dupes
ABC Corp | 7
Foo Federation | 5
Widget Company | 2
Run Code Online (Sandbox Code Playgroud)
但我也想抓住他们的身份证.有没有办法做到这一点?也许就像一个
orgName | dupeCount | id
ABC Corp | 1 | 34
ABC Corp | 2 | 5
...
Widget Company | 1 | 10
Widget Company | 2 | 2
Run Code Online (Sandbox Code Playgroud)
原因是还有一个单独的用户表链接到这些组织,我想统一它们(因此删除欺骗,以便用户链接到同一组织而不是欺骗组织).但我想手动分配,所以我不会搞砸任何东西,但我仍然需要一个声明返回所有欺骗组织的ID,以便我可以浏览用户列表.
我有以下查询:
select column_name, count(column_name)
from table
group by column_name
having count(column_name) > 1;
Run Code Online (Sandbox Code Playgroud)
会有什么区别,如果我更换了所有调用count(column_name)到count(*)?
这个问题的灵感来自于如何在Oracle中的表中找到重复值?.
为了澄清已接受的答案(也许是我的问题),替换count(column_name)为count(*)将在结果中返回一个额外的行,其中包含a null和null列中的值计数.
我正在编写此查询以查找table1中的重复CTN记录.所以我的想法是,如果CTN_NO出现超过两次或更高,我希望它在我的SELECT*语句输出中显示在顶部.
我尝试了以下子查询逻辑,但我需要拉动
SELECT *
table1
WHERE S_IND='Y'
and CTN_NO = (select CTN_NO
from table1
where S_IND='Y'
and count(CTN_NO) < 2);
order by 2
Run Code Online (Sandbox Code Playgroud)