SQL Server:删除重复记录,但可以按特定列选择要保留的记录
我有问题,就是找不到正确的解决办法。 希望你能帮助我 我有一张这样的桌子:SQL Server:删除重复记录,但可以按特定列选择要保留的记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有问题,就是找不到正确的解决办法。 希望你能帮助我 我有一张这样的桌子: ID Date description location 1 2012-12-01 low A 1 2012-12-01 low A 1 2012-12-01 low B 2 2012-12-01 High A 3 2012-12-01 Low
ID Date description location
1 2012-12-01 low A
1 2012-12-01 low A
1 2012-12-01 low B
2 2012-12-01 High A
3 2012-12-01 Low C
;WITH t AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ID, Date, description
ORDER BY location DESC) As seq
FROM yourTable)
SELECT ID, Date, description, location -- change this line to `DELETE` for removing
FROM t
WHERE (seq > 1);
结果应该是这样的
ID Date description location
1 2012-12-01 low B
2 2012-12-01 High A
3 2012-12-01 Low C
希望您能帮助我。使用DISTINCT消除重复行
SELECT ID,Date,description,MAX(location) as location
FROM tableName
GROUP BY ID,Date,description
SELECT DISTINCT ID,Date,description, location
FROM tableName
如果要选择仅重复的记录以将其与最后位置一起删除,请使用如下查询:
ID Date description location
1 2012-12-01 low A
1 2012-12-01 low A
1 2012-12-01 low B
2 2012-12-01 High A
3 2012-12-01 Low C
;WITH t AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ID, Date, description
ORDER BY location DESC) As seq
FROM yourTable)
SELECT ID, Date, description, location -- change this line to `DELETE` for removing
FROM t
WHERE (seq > 1);
通过此查询删除之前,可以预览表的结果:
SELECT ID, Date, description, location
FROM (SELECT *,
ROW_NUMBER() OVER (PARTITION BY ID, Date, description
ORDER BY location DESC) As seq
FROM yourTable) dt
WHERE (seq = 1);
对行进行优先级排序的一般方法是在case语句中使用row_number 在您的情况下,这似乎是:
select t.*
from (select t.*,
row_number() over (partition by id, description
order by location desc
) as seqnum
from table t
) t
where seqnum = 1;
试试这个
SELECT ID,Date,description,location
FROM tableName
GROUP BY ID,Date,description,location
Having count(location) = 1
你试过分组吗?你是如何确定应该选择B而不是A的?它是按字母顺序排列的吗?也可以只有2个位置A和B,或者可以有任意数量的位置,并且您希望根据某种逻辑选择一个特定的位置?什么决定从哪个位置选择?也许是最高的字母数字值?位置听起来不像是一个可以决定排的顺序的专栏。你的问题还不清楚。您如何知道“B”是为ID 1保留的正确值,而不是“A”?如果1也有可用的“C”值,您会怎么做?编辑您的问题,并完整解释如何从“位置”中选择结果集中应包含的值。请注意最大字符列!如果你有一个像A-Z,AA,AB等这样的excel,这将不起作用。在SQL Server上,AA和B的最大值为B!你的答案与问题中的新数据不符。我不明白你怎么能回答这个问题,即使现在有了额外的答案information@t-克劳森。修改后的代码适用于当前版本。我不确定这是否是OP的意图。我不认为该党派应该包括描述,因为现在的问题是,这是没有必要的,但这是正确的想法。并在测试数据中给出了一个坏例子。