0

当谈到 SQL 时,我是个菜鸟,所以如果这很明显,请原谅我。我想找到客户字段的重复项,以及包含它们的完整记录。

注意: 我使用的是 MS SQL Server 2005。

在想出以下内容之前,我尝试将其实现为单个 SQL Select 语句:

SELECT ModTab.* from modTab
    WHERE Customer IN (SELECT Customer
            FROM    ModTab
            GROUP BY Customer
            HAVING COUNT(Customer) > 1
        )
    ORDER BY Customer

最初我尝试了十几种不同的变体,例如:

SELECT ModTab.*
FROM    ModTab
GROUP BY Customer,<ALL other fields...>
HAVING COUNT(Customer) > 1

有没有类似第二种方法的东西可以完成同样的事情?(加上 Group by 子句对我来说似乎毫无意义?我不清楚为什么需要或使用它。)

4

3 回答 3

1

尝试这个:

select modTab.*
from ModTab
join (
  select Customer, count(*) 
  from Modtab 
  group by Customer
) B on B.Customer = ModTab.Customer
order b Customer

我相信这现在也解释了 group by 的必要性。

于 2013-03-13T19:13:06.357 回答
0

If using an RDBMS (such as SQLServer) that supports analytic functions, try:

select * from
(select m.*, count(*) over (partition by customer) cnt
 from Modtab m) ilq
where cnt > 1

Otherwise, try:

select m.*
from Modtab m
where exists
(select 1
 from Modtab l
 where m.customer = l.customer and m.id <> l.id)

(Replace id with the suitable primary key field for Modtab.)

于 2013-03-13T19:22:23.660 回答
0
WITH    numbered
AS ( SELECT   *, row_number() OVER ( PARTITION BY customer ORDER BY customer  ) AS nr FROM ModTab)
Select * from numbered WHERE   nr >1
于 2013-03-13T19:28:36.663 回答