【问题标题】:How can I delete these rows如何删除这些行
【发布时间】:2012-01-29 15:35:58
【问题描述】:

我在这样的表格中的列

column1  column2
100       1
100       1
101       2
101       3
102       4
102       5
103       6
104       7
104       7

我想要这样的输出

column1 column2
101       2
101       3
102       4
102       5
103       6

【问题讨论】:

  • 你是怎么得到低于输出的?你在遵循什么算法?还有你尝试过什么,你在哪里遇到问题??
  • 这是sql server 2008的问题
  • 嘿伙计,你想deleteselect还是两者兼而有之?!

标签: sql-server-2008


【解决方案1】:
declare @T table
(
  c1 int,
  c2 int
)

insert into @T values
(100,       1),
(100,       1),
(101,       2),
(101,       3),
(102,       4),
(102,       5),
(103,       6),
(104,       7),
(104,       7)

;with C as
(
  select count(*) over(partition by C1, C2) as D
  from @T
)
delete from C
where D > 1

【讨论】:

  • 我不同意您的命名约定:C 将比 D 更自然地选择 COUNT(*) 的名称,并且为避免可能的混淆,C CTE 可以命名为E!开个玩笑:)这是一个(另一个)实际使用 CTE 的好例子!
  • @AndriyM - 好的,我会在名称方面工作一点:)。我猜D 在这种情况下可能是DuplicateCount 的缩写。当C是表T的派生表时,C实际上是一个很好的名字:)。
【解决方案2】:

如果您只想让查询返回不重复的行,您需要:

SELECT DISTINCT column1, column2
FROM MyTable

如果您确实想删除这些行,请点击@Ahamed 的链接到a previous SO answer on deleting duplicate rows

【讨论】:

  • 它不起作用。请仔细看查询,没那么容易
【解决方案3】:

显然你只想要 column2 的值在 2 到 6 之间的行

Delete from your_table
Where column2<2 or column2>6

现在您将只剩下您想要的行,您现在可以选择全部:

Select column1, column2
From yourtable 

【讨论】:

  • Delete from your_table Where column in (1,7)
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 2011-08-31
  • 2013-04-06
  • 2011-05-30
相关资源
最近更新 更多