在SQL Server 2008中使用select where来查找一个列上的重复项。

14 浏览
0 Comments

在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

理想情况下,查询应该返回前两行。

0
0 Comments

问题的出现的原因是在查询语句中使用了count(Terms)having子句中,然而Termsselect子句中也被包含了。这意味着对于每条记录,count(Terms)的值将始终为1。可能需要将Termsselect列表中排除。

解决方法如下:

select Id, count(Terms) from QueryData 
where Track = 'Y' and Active = 'Y'
group by Id
having count(Terms) > 1

以上代码是可能符合您需求的查询语句。

0
0 Comments

问题的出现原因是需要在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

0
0 Comments

问题的出现原因是需要在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中找到一个列上的重复项。

0