0

私はSQLに関しては一種の初心者なので、これが明らかな場合はご容赦ください。Customer フィールドの重複と、それらを含む FULL レコードを見つけたかったのです。

注: 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

同じことを達成する2番目のアプローチのようなものはありますか? (さらに、Group by 句は私には無意味に思えますか?なぜそれが必要なのか、または使用されているのか、私にはよくわかりません。)

4

3 に答える 3

1

Try this:

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

I believe this also now explains the need for the group by.

于 2013-03-13T19:13:06.357 に答える
0

分析関数をサポートするRDBMS(SQLServerなど)を使用している場合は、次のことを試してください。

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

それ以外の場合は、次を試してください。

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

idModtabの適切な主キーフィールドに置き換えます。)

于 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 に答える