Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 Select列,该列未在查找重复项的子查询的Select节中使用_Sql_Sql Server_Duplicates - Fatal编程技术网

SQL Select列,该列未在查找重复项的子查询的Select节中使用

SQL Select列,该列未在查找重复项的子查询的Select节中使用,sql,sql-server,duplicates,Sql,Sql Server,Duplicates,我试图在我的数据库记录中找到重复的字段,如姓名、姓氏和类型 例如: SELECT name, surname, type, COUNT(*) FROM customers GROUP BY name, surname HAVING COUNT(*)>1 查询结果: 罗布·斯塔克1 | 2 提利昂|兰尼斯特| 1 | 3 因此,我们复制了两次名为Robb Stark、姓为Tyrion Lannister的客户,以及三次名为Tyrion Lannister的客户 现在,我想知道这些记录的id

我试图在我的数据库记录中找到重复的字段,如姓名、姓氏和类型

例如:

SELECT name, surname, type, COUNT(*)
FROM customers
GROUP BY name, surname
HAVING COUNT(*)>1
查询结果:

罗布·斯塔克1 | 2

提利昂|兰尼斯特| 1 | 3

因此,我们复制了两次名为Robb Stark、姓为Tyrion Lannister的客户,以及三次名为Tyrion Lannister的客户
现在,我想知道这些记录的id。 我发现这里描述了类似的问题: 有答案,但没有示例。

使用计数作为分析函数:

以cte为例 按名称、姓氏cnt在分区上选择*、计数* 来自客户 选择*-返回所有列 来自cte 其中cnt>1 按姓名、姓氏排序;
最简单的方法是使用EXISTS,如下所示:

SELECT t.*
  FROM customers t
 where exists 
  (select 1 from customers tt
    where tt.name = t.name
      and tt.surname = t.surname
      and tt.id <> t.id)
select * from customers where (name, surname) in
(SELECT name, surname
FROM customers
GROUP BY name, surname
HAVING COUNT(*)>1)

如果您希望每组重复数据有一行,并且id列表以逗号分隔,则可以在现有查询中使用字符串加总:

SELECT name, surname, COUNT(*) as cnt,
    STRING_AGG(id, ',') WITHIN GROUP (ORDER BY id) as all_ids
FROM customers
GROUP BY name, surname
HAVING COUNT(*) > 1

非常感谢。是否也有可能显示这样的结果:Robb Stark | 454854,其中454和854是ID?您还可以在CTE中包括按名称、姓氏ID划分的组CONCATid。但现在你似乎真的在要求两件不同的事情。如果您只需要聚合,那么请坚持使用当前的分组查询。如果你想保留每一条记录,那么请使用我的答案。我认为我的SQL不支持GROUP_CONCAT和JSON_ARRAYAGGfunctions@maniootek:我的印象是您正在运行MySQL,但似乎不是。你在运行什么数据库?运行我的查询时会出现哪个错误?我使用Microsoft SQL数据库,MySQLQuery不起作用,但只有在删除第二行all_ids select语句时才起作用。当我离开它时,我发现附近有错误语法。@maniootek:string\u agg是在SQL Server 2017中添加的。。。也许你正在运行旧版本?我想知道这些记录的id。您的问题没有显示id的示例数据。您的查询格式也不正确,将在SQL Server中返回错误,因为类型不在GROUP BY中。