我是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)
答案 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