【发布时间】:2011-12-09 05:38:16
【问题描述】:
我正在使用 VS2005 C# 和 SQL Server 2005。我想形成一个具有以下条件的 SQL 查询:
检查 Table1 tb1 中的重复用户,其中 tb1 有多个 [Emp.Name]
编辑:
简单地说,如果我只检查重复的[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]。
已编辑:
分别处理 Zohalib 和 Michal Powaga 提供的这两个查询:
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
错误:没有为 's2 的第 2 列指定任何列
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]'
不胜感激,谢谢。
【问题讨论】:
-
此查询在 INSERT 中有 3 列,但在 SELECT 中有 4 列?
-
我的错误。已编辑:为 SELECT 语句添加了附加列
-
您正在插入并从同一个表中选择。你想达到什么目的?我以为你把它们搬到别处了。
-
只需在第二个查询@user1084683 中选择employeeID, t.[emp name], 'Active', 'Duplicated user in Table1'
-
@user1084683 对于我的查询,您只需要提及 count() 列的名称,就这样做。 select (select emp_name, count() as counts
标签: c# sql sql-server sql-server-2005