2012-07-16 143 views
0

我試圖選擇在LASTNAME列中具有重複值的所有記錄。這是我的代碼到目前爲止SELECT GROUP BY和HAVING不返回記錄

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值的記錄。它利用被寫入T-SQL的SQL Server

+0

Sql-Server? MySQL? – 2012-07-16 18:33:59

+0

Sql服務器,對不起 – user971840 2012-07-16 18:39:08

回答

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 
+0

工作完美!我之前做過,但沒想到要重命名TM_USER。謝謝! – user971840 2012-07-16 18:46:29

2

你Group By子句將集團通過在列表中的所有comuns。這些列可能定義計數的謹慎紀錄= 1

你需要做這樣的事情:

Select LAST_NAME from TM_USER GROUP BY LAST_NAME HAVING COUNT(LAST_NAME) > 1 
1

COUNT函數計算在所有分組表達式,沒有結束LASTNAME。

爲了得到獨一無二的姓氏使用

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

如果按幾列,你會即使在計算單個列值COUNT得到他們的獨特組合的數量。