如何在sql中搜索匹配的员工编号

时间:2016-03-11 15:10:15

标签: sql sql-server

我是sql的新手,并尝试提出一个SQL查询,它将列出我在系统中创建的重复人员。 我们有一个工作人员创建id为1234,同一个用户有另一个帐户,从员工ID 01234开始。无论如何,我可以得到匹配的工作人员 一旦我拿出正确的副本,我将不想删除开头没有“0”的帐户,例如删除1234并且只保留01234

下面是sql

SELECT     tps_user.tps_title AS [Name] , tps_user_type.tps_title AS [User Type]
FROM       tps_user INNER JOIN
                      tps_user_type ON tps_user.tps_user_type_guid = tps_user_type.tps_guid
WHERE     (tps_user.tps_title IN
                          (SELECT     tps_title AS users
                            FROM          tps_user AS t1
                            WHERE      (tps_deleted = 0)
                            GROUP BY tps_title
                            HAVING      (COUNT(tps_title) > 1))) AND (tps_user.tps_deleted = 0)

3 个答案:

答案 0 :(得分:1)

当你这样做的时候选择试试这个:

SELECT DISTINCT CONVERT(INT,ID)
FROM your_table
WHERE ...

OR

SELECT ID
FROM your_table
WHERE ...
GROUP BY ID

这会暂时将所有id转换为int,所以当distinct重复计算重复项时,所有内容都是统一的,以便准确表示重复项。

如果您不想转换它们,可以转换它们并将它们插入临时表并添加一个标志,其中一个标记为前导零。或者转换它们然后在删除重复项后添加零,因为无论如何你想要它。很容易追加0。

答案 1 :(得分:0)

Select t1.stringId
from mytable t1
inner join mytable t2 on Convert(INT, t1.intId) = CONVERT(INT, t2.intId)
where t1.stringId not like '0%'

这应列出所有具有重复但不以0开头的人。

答案 2 :(得分:0)

以下查询将为您提供具有相同名称和标题的重复项列表。 -

SELECT     tps_user.tps_title AS [Name] , 
           tps_user_type.tps_title AS [UserType], 
           COUNT(*) Duplicate_Count
FROM       tps_user 
INNER JOIN tps_user_type 
           ON tps_user.tps_user_type_guid = tps_user_type.tps_guid 
group by   tps_user.tps_title, tps_user_type.tps_title
having COUNT(*) > 1 
order by Duplicate_Count desc