2011-12-09 49 views
1

我使用VS2005 C#和SQL Server 2005。我想,以形成具有以下條件的SQL查詢:SQL檢查表重複的用戶名

表1 TB1檢查重複的用戶其中TB1擁有多臺[Emp.Name]

編輯

簡單地說,如果我只是重複檢查爲[emp name],T我無法選擇[employeeID]

因爲如果我使用

INSERT INTO DuplicateUserInTb1(EmployeeID, [Emp Name], Status, Issue) 
SELECT tb1.EmployeeID, tb1.[Emp Name], 'Active', 'Duplicated user in Table1' 
FROM Table1 tb1 GROUP BY tb1.[employeeID], tb1.[emp name] HAVING COUNT(tb1.[emp name]) >1 

我將無法看到任何重複插入[emp name]行。

但是,如果我用

INSERT INTO DuplicateUserInTb1([Emp Name], Status, Issue) 
SELECT tb1.EmployeeID, tb1.[Emp Name], 'Active', 'Duplicated user in Table1' 
FROM Table1 tb1 GROUP BY tb1.[emp name] HAVING COUNT(tb1.[emp name]) >1 

我能夠檢索複製[emp name],但是,如果沒有[employeeID]


EDITED:

Zohalib和分別米哈爾Powaga提供這些2個查詢工作:

INSERT INTO DuplicateUserInTb1(EmployeeID, [Emp Name], Status, Issue) 
select t.emp_id, t.empname, t.active, t.du 
from (select s1.emp_id, s1.empname,'Active' as active, 'Duplicate User' as du, 
ROW_NUMBER() OVER (PARTITION BY s1.empName ORDER BY s1.empName) as rowNum 
from table s1, 
(select emp_name, count(*) 
from table 
group by emp_name 
having count(*) > 1) s2 
where s1.emp_name = s2.emp_name 
) t where t.rowNum = 1 

錯誤:無柱爲第2欄指明's2


insert into DuplicateUserInTb1(EmployeeID, [Emp Name], Status, Issue) 
select employeeID, [emp name], 'Active', 'Duplicated user in Table1' 
from Table1 t1 
join (
    select [emp name] 
    from Table1 
    group by [emp name] 
    having count(*) > 1 
) t on t1.[emp name] = t.[emp name] 

錯誤:* Ambiguous column name '[Emp name]'


希望得到任何幫助,謝謝。

+3

此查詢在INSERT中有3列,但SELECT中有4列? –

+0

我的錯誤。已編輯:爲SELECT語句添加了附加列 – user1084683

+0

您正在插入並從同一張表中進行選擇。你想達到什麼目的?我以爲你在別的地方移動它們。 – Kangkan

回答

3

當您使用GROUP BY子句,那麼你的SELECT子句只能包含列

which are either mentioned in group by clause

Or aggregate functions, eg Count, SUM e.t.c http://www.w3schools.com/sql/sql_groupby.asp

此外,在您的查詢,您在三列中插入值,但你的SELECT子句中選擇四個值,應這是一個問題嗎?

試試下面的查詢基於empname

INSERT INTO DuplicateUserInTb1(EmployeeID, [Emp Name], Status, Issue) 
select t.emp_id, t.empname, t.active, t.du 
from (select s1.emp_id, s1.empname,'Active' as active, 'Duplicate User' as du, ROW_NUMBER() OVER (PARTITION BY s1.empName ORDER BY s1.empName) as rowNum 
from table s1, 
(select emp_name, count(*) as counts 
from table 
group by emp_name 
having count(*) > 1) s2 
where s1.emp_name = s2.emp_name 
) t where t.rowNum = 1 
+0

@Zohalib。我的錯誤,我做了必要的更改。 – user1084683

+0

@ user1084683不應該問題解決,如果您在group by子句中添加其他兩列? – Zohaib

+0

@Zohalib在我的sql對於重複的用戶檢查table2,它在GROUP by子句中有兩個變量,所以它同時採用'[EmployeeID]'和'[Emp Name]'兩列,並通過對檢查它們是否有重複。只希望在[Emp Name]中進行重複檢查,所以我假設我只需要'GROUP BY tb2 [Emp Name]'? – user1084683

2
insert into DuplicateUserInTb1(EmployeeID, [Emp Name], Status, Issue) 
select t1.employeeID, t1.[emp name], 'Active', 'Duplicated user in Table1' 
from Table1 t1 
join (
    select [emp name] 
    from Table1 
    group by [emp name] 
    having count(*) > 1 
) t on t1.[emp name] = t.[emp name] 
+0

它給了我一個錯誤,說'不明確的列名'[Emp name]'。' – gymcode

+0

@RUiHAO,對不起,更正。 –

+0

HI Michal Powaga,我添加了SELECT DISTINCT,因爲它爲每個找到的重複用戶顯示相同的記錄。但是,是否有一種方法可以匹配兩個同時找到的重複用戶?因爲發現的重複用戶列表分散在表中。是否可以按名稱將它們排序? 如果我沒有放入DISTINCT,找到的每個重複記錄將在表中列出x6次。任何想法爲何如此? – user1084683

0

米哈爾Powaga方法效果插入重複。只需在他的解決方案上添加DISTINCT即可。

insert into DuplicateUserInTb1(EmployeeID, [Emp Name], Status, Issue) 
select DISTINCT t1.employeeID, t1.[emp name], 'Active', 'Duplicated user in Table1' 
from Table1 t1 
join (
    select [emp name] 
    from Table1 
    group by [emp name] 
    having count(*) > 1 
) t on t1.[emp name] = t.[emp name]