如果您的Id
列和Value
列有重复的行,这太容易了。但是在采访中我被问到如何删除它,如果你只有Value
列。例如:
table_a输入:
Value
A
A
B
A
C
D
D
E
F
F
E
table_a输出:
Value
A
B
C
D
E
F
问题:您的表只有一列Value
,并且您必须delete
所有行都有重复项(如结果上部)。
答案 0 :(得分:7)
如果您被允许使用CTE:
with cte as (
select
row_number() over(partition by Value order by Value) as row_num,
Value
from Table1
)
delete from cte where row_num > 1
正如t-clausen.dk在评论中建议的那样,你甚至不需要在CTE内部获得价值:
with cte as (
select
row_number() over(partition by Value order by Value) as row_num
from Table1
)
delete from cte where row_num > 1;
答案 1 :(得分:5)
嗯,请注意使用CTE
公用表表达式(CTE)可以被认为是临时表 在单个执行范围内定义的结果集 SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句。 CTE是 类似于派生表,因为它不存储为对象和 仅持续查询的持续时间。与派生表不同,a CTE可以是自引用的,可以多次引用 相同的查询。
返回结果分区中行的序号 设置,从1开始,每个分区的第一行。
像
这样的东西;WITH Vals AS (
SELECT [Value],
ROW_NUMBER() OVER(PARTITION BY [Value] ORDER BY [Value]) RowID
FROM MyTable
)
DELETE
FROM Vals
WHERE RowID > 1
答案 2 :(得分:0)
select distinct value
from your_table
(因为问题已被用户更新,不再相关,请参阅Roman Pekar的回答)