0

LASTNAME 列に重複する値を持つすべてのレコードを選択しようとしています。これはこれまでの私のコードです

If EXISTS( SELECT name FROM sysobjects WHERE name = 'USER_DUPLICATES' AND type = 'U' ) 
    DROP TABLE USER_DUPLICATES
GO

CREATE TABLE USER_DUPLICATES
(
    FIRSTNAME VARCHAR(MAX),
    LASTNAME VARCHAR(MAX),
    PHONE VARCHAR(MAX),
    EMAIL VARCHAR(MAX),
    TITLE VARCHAR(MAX),
    LMU VARCHAR(MAX)
)
GO

INSERT INTO USER_DUPLICATES
(
    FIRSTNAME,
    LASTNAME,
    PHONE,
    EMAIL,
    TITLE,
    LMU
)
SELECT
    FIRSTNAME,
    LASTNAME,
    PHONE,
    EMAIL,
    TITLE,
    LMU
FROM TM_USER
GROUP BY
    FIRSTNAME,
    LASTNAME,
    PHONE,
    EMAIL,
    TITLE,
    LMU
HAVING COUNT(LASTNAME) > 1

レコードは返されません。私は

HAVING COUNT(LASTNAME) > 1

HAVING COUNT(LASTNAME) > 0

すべてのレコードを返します。また、同じ LASTNAME 値を持つレコードがあることも確かです。SQL Server で T-SQL を使用して記述されています

4

3 に答える 3

2

これを試して:

SELECT
    a.FIRSTNAME,
    a.LASTNAME,
    a.PHONE,
    a.EMAIL,
    a.TITLE,
    a.LMU
FROM TM_USER a
INNER JOIN
(
    SELECT LASTNAME
    FROM TM_USER
    GROUP BY LASTNAME
    HAVING COUNT(1) > 1
) b ON a.LASTNAME = b.LASTNAME
于 2012-07-16T18:40:45.357 に答える
2

Group By句は、リスト内のすべてのcomunをGroupByします。これらの列は、おそらくcount=1の目立たないレコードを定義します

次のようなことをする必要があります。

Select LAST_NAME from TM_USER  GROUP BY LAST_NAME HAVING COUNT(LAST_NAME) > 1
于 2012-07-16T18:43:23.423 に答える
1

COUNT関数は、LASTNAMEではなく、すべてのグループ化式に対して計算されます。

一意の名前を取得するには、

SELECT LASTNAME FROM TM_USER GROUP BY LASTNAME HAVING COUNT(LASTNAME) > 1

いくつかの列でグループ化すると、単一の列の値でCOUNTを計算する場合でも、それらの一意の組み合わせのカウントが得られます。

于 2012-07-16T18:44:59.007 に答える