首先,我会为您设置一个示例,以便您进行测试。
最初的回答将被翻译成“Original Answer”。
CREATE TABLE #example
(
EID INT PRIMARY KEY IDENTITY,
EName VARCHAR(100),
ERole VARCHAR(MAX)
)
INSERT INTO
#example
VALUES
('Nani','SQL'),
('Nani','SQL Developer'),
('Suresh','ASP .Net Developer'),
('Suresh','ASP .Net'),
('Ravi','Sales Force'),
('Ravi','Sales Force developer')
如果您想按照您的条件(相同的Ename,ERole前10个字符相同)删除重复记录,则可以使用以下方法:
现在,最初的回答是:
WITH grouped_example as (
SELECT
ROW_NUMBER() OVER(PARTITION BY Ename, SUBSTRING(ERole,0,10) ORDER BY ERole DESC) as preserve,
EID
FROM #example
)
DELETE FROM grouped_example where preserve <> 1
如果您想要选择不重复的内容,可以使用以下方法:
SELECT DISTINCT
WITH grouped_example as (
SELECT
ROW_NUMBER() OVER(PARTITION BY Ename, SUBSTRING(ERole,0,10) ORDER BY ERole DESC) as preserve,
*
FROM #example
)
SELECT EID,EName,ERole FROM grouped_example where preserve = 1
*注意:我使用ORDER BY ERole DESC,这样我们就能保留更多信息(更多字符)的角色
*注意2:您可以更改SUBSTRING()的最后一个值以匹配所需的字符数
"原始答案"