在SQL Server 2008中使用select where来查找一个列上的重复项。
在SQL Server 2008中使用select where来查找一个列上的重复项。
我正在尝试从一个表中选择具有一个列中重复项的行,但同时基于另一列对行进行限制。但是它似乎无法正常工作。
select Id,Terms from QueryData where Track = 'Y' and Active = 'Y' group by Id,Terms having count(Terms) > 1
如果我去掉where
部分,它可以正常工作,但我需要限制它只针对这些行。
ID Terms Track Active 100 paper Y Y 200 paper Y Y 100 juice Y Y 400 orange N N 1000 apple Y N
理想情况下,查询应该返回前两行。
问题的出现原因是需要在SQL Server 2008中找到具有重复的列的行。解决方法是使用嵌套的SELECT语句和WHERE子句来查找具有重复值的行。
以下是解决问题的步骤:
1. 在QueryData表中选择Id、Terms、Track和Active列。
2. 在WHERE子句中使用IN运算符,将子查询的结果作为参数传递。
3. 在子查询中,选择具有Track值为'Y'和Active值为'Y'的Terms列。
4. 使用GROUP BY子句按Terms进行分组。
5. 使用HAVING子句检查每个分组中的行数是否大于1,即是否有重复。
最后,我们将得到具有重复Terms值的行。
以下是使用上述解决方案后的结果:
Id Terms Track Active
100 paper Y Y
200 paper Y Y
问题的出现原因是需要在SQL Server 2008中找到一个列上的重复项。解决方法是使用SELECT WHERE语句和GROUP BY子句来筛选出满足条件的重复项,并使用HAVING COUNT(*)> 1来确定重复项的数量。
首先,使用下面的代码来返回满足条件的所有重复项:
select Terms from QueryData where Track = 'Y' and Active = 'Y' group by Terms having count(*) > 1
这将返回所有满足条件的重复项。
如果你想要这些重复项的所有详细信息,可以将其与结果进行连接。可以使用下面的代码来实现:
;with dups as ( select Terms from QueryData where Track = 'Y' and Active = 'Y' group by Terms having count(*) > 1 ) select qd.ID, qd.Terms, qd.Track, qd.Active from QueryData qd join dups d on qd.terms = d.terms
这将返回与重复项相关的所有详细信息。
通过以上方法,我们可以轻松地在SQL Server 2008中找到一个列上的重复项。