Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 2008 只需要在sql中显示重复的值_Sql Server 2008 - Fatal编程技术网

Sql server 2008 只需要在sql中显示重复的值

Sql server 2008 只需要在sql中显示重复的值,sql-server-2008,Sql Server 2008,我有一张桌子 id----name----roll-----class 1----ram-------1-----2 2----shyam-----2-----3 3----ram-------1-----3 4----shyam-----2-----3 5----ram-------1-----2 6----hari------1-----5 我只需要在重复的行中找到具有公共名称、卷名、类的行。所以我的预期结果是 id----name----roll-----cla

我有一张桌子

id----name----roll-----class
 1----ram-------1-----2
 2----shyam-----2-----3   
 3----ram-------1-----3
 4----shyam-----2-----3
 5----ram-------1-----2
 6----hari------1-----5
我只需要在重复的行中找到具有公共名称、卷名、类的行。所以我的预期结果是

    id----name----roll-----class
     1----ram-------1-------2
     2----shyam-----2-------3           
     4----shyam-----2-------3
     5----ram-------1-------2
我试图从下面的查询中获取,但这里只支持一个字段。我需要这三个领域的共同点。请帮我做这件事。谢谢

SELECT * 
FROM table 
WHERE tablefield IN ( 
 SELECT tablefield
 FROM table 
 GROUP BY tablefield  
 HAVING (COUNT(tablefield ) > 1) 
) 

这将仅重新运行重复条目一次:

select t.id, t.name, t.roll, t.class 
from table t 
inner join table t1 
on t.id<t1.id 
and t.name=t1.name 
and t.roll = t1.roll 
and t.class=t1.class

我建议这样做

SELECT A.* FROM
Table A LEFT OUTER JOIN Table B
ON A.Id <> B.Id AND A.Name = B.Name AND A.Roll = B.Roll AND A.Class = B.Class
WHERE B.Id IS NOT NULL
从中选择一个*
表A左外联接表B
在A.Id上B.Id和A.Name=B.Name和A.Roll=B.Roll和A.Class=B.Class
其中B.Id不为空

类似的东西应该可以工作(但我没有测试):

这里好像有好几件道具。如果您将在代码中使用查询,请注意查询的成本。请尝试对数据库进行“解释”。

您可以使用


谢谢你的回答。我很欣赏你举的例子。@MikaelEriksson我怀疑,选择的答案是胡言乱语@Mikael嗯,这不起作用,但正如他所说的,如果我把*放在计数中,我认为这会起作用。我只是随机检查,但我需要彻底检查,因为我的数据库是复杂的,然后我在示例中给出。我会让你知道的。@Dinupkandel-更改为
count(*)
将显示查询中的下一个错误。如果字段列表中的
id
不是group by子句的一部分,则该字段列表中不能有该字段。@MikaelEriksson在我的问题中,我寻找的是除id之外的所有列都应完全匹配。在或条件中,我应该做什么,即如果数据在名称、卷或类中都是公共的。我有一个表,表a和B是什么意思。我没有得到它。“从表A”=”从名为“表”的表中,从现在起我在查询中将其称为“A”
SELECT A.* FROM
Table A LEFT OUTER JOIN Table B
ON A.Id <> B.Id AND A.Name = B.Name AND A.Roll = B.Roll AND A.Class = B.Class
WHERE B.Id IS NOT NULL
select a1.* 
from table a1, a2 
where (a1.id != a2.id) 
  and (a1.name == a2.name) 
  and (a1.roll== a2.roll)   
  and (a1.class== a2.class); 
select id, name, roll, class
from (select id, name, roll, class,
             count(*) over(partition by name, roll, class) as c
      from YourTable) as T
where c > 1
order by id