Проверка SQL для дублированного имени пользователя в таблице - PullRequest
0 голосов
/ 09 декабря 2011

Я использую VS2005 C # и SQL Server 2005. Я хочу сформировать SQL-запрос со следующим условием:

Проверить наличие дублированного пользователя в Table1 tb1 где tb1 имеет более одного [Emp.Name]

EDIT :

Проще говоря, если я проверяю только дубликаты для [emp name]нет, я не могу выбрать [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].


РЕДАКТИРОВАНИЕ:

Работа над этими 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

* не указан1047 *
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]'


Буду признателен за любую помощь, спасибо.

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Когда вы используете предложение Group By, тогда предложение select может содержать только столбцы

которые упоминаются в группе по пункту

Или агрегатные функции, например, 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
1 голос
/ 09 декабря 2011
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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...