Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用计数/分组依据时需要选择所有列_Sql_Sql Server_Database_Group By - Fatal编程技术网

Sql 使用计数/分组依据时需要选择所有列

Sql 使用计数/分组依据时需要选择所有列,sql,sql-server,database,group-by,Sql,Sql Server,Database,Group By,我有一个表,其中一列有一些重复记录 我的任务是选择具有所有属性的重复记录 都柏林城邦客户FN DOB有一些重复值,我需要从整个表中选择这些值,并列出DOB字段中所有相同记录的所有列 我的尝试 Select DOB, COUNT(DOB) As 'SameDOB' from Table1 group by DOB HAVING (COUNT(DOB) > 1) 这只返回两列和一行。第一列是多次出现的DOB列,第二列给出计数 我需要找出一种方法来列出所有属性,而不仅仅是这两个 请指导我

我有一个表,其中一列有一些重复记录

我的任务是选择具有所有属性的重复记录

都柏林城邦客户FN

DOB有一些重复值,我需要从整个表中选择这些值,并列出DOB字段中所有相同记录的所有列

我的尝试

Select  DOB, COUNT(DOB) As 'SameDOB' from Table1

group by DOB

HAVING (COUNT(DOB) > 1)
这只返回两列和一行。第一列是多次出现的DOB列,第二列给出计数

我需要找出一种方法来列出所有属性,而不仅仅是这两个


请指导我正确的方向。

尝试加入子查询,这也将允许您查看计数

Select * 
FROM  Table1 T
WHERE T.DOB IN( Select   I.DOB
                FROM     Table1 I
                GROUP BY I.DOB
                HAVING   COUNT(I.DOB) > 1)
select t.*, a.SameDOB from Table1 t
join (
  Select  DOB, COUNT(DOB) As 'SameDOB' from Table1 
  group by DOB 
  HAVING (COUNT(DOB) > 1) 
) a on a.dob = t.dob

我认为更通用的解决方案是使用windows功能:

select *
from (select *, count(*) over (partition by dob) as NumDOB
      from table
     ) t
where numDOB > 1

更一般的原因是,很容易在两列或多列中更改为重复项。

您只需在
选择中列出它们,不要忘记将它们包含在
分组中。我错过什么了吗?你试过了吗?它没有给你你期望的结果?@Paveleller-通常,是的,group by可以工作,但是当你试图查找重复项时,group by对所有字段只会查找不同行的计数,因此计数必须放在子查询或CTE中。对子查询使用'IN'子句可能会非常慢,仅供参考。@ChrisGessler。修复了from的问题,但我不确定
中的
是否较慢。LOL-按dob从dob组中选择dob,按dob进行dob排序。。。。但是是的,众所周知IN子句比joins慢@克里斯盖斯勒。比按狗从狗组中选择狗更好…
@ChrisGessler。我读过那篇帖子,我不知道那家伙看起来一点都不是专家。阅读他的博客上的评论,读者教他
EXIST
。这是什么???啊…这很有效。说到子查询,我还是个新手。我想我需要在接下来的日子里集中精力解决这个问题。我需要找一本书详细介绍这一点。@JohnSmith-MSDN在你有空闲的时候是一本很好的读物。现在,另一部分是,找到最年轻的客户并列出所有有该DOB的客户。换句话说,我将在实体中至少有一条具有所有属性的记录……从Customers Group by DateOfBirth Order by DateOfBirth descNow中选择top(1)DateOfBirth,COUNT(DateOfBirth)作为“最年轻的客户”,这给了我两列。一个有最小客户的DOB,另一个有最小客户的计数。然后我需要列出最年轻的客户信息(其他属性)…因为我只有一个客户具有该dob,所以我将有一行。但我很难弄明白这一点…我要试试这个子查询格式,看看能得到什么。我还需要了解一件事…分区。谢谢…今晚学习了很多。请给出你的代码和正确的解释。只有代码的答案不受欢迎。
select * 
from table1, (select count(*) from table1) as cnt