2012-01-28 133 views
2

我的表中的列这样如何删除这些行

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 
+0

你是如何得到低于产量?你跟随什么算法?还有什么你尝试过,你在哪里面临问题? – 2012-01-28 06:40:22

+0

可能重复的[如何删除完全重复的行](http://stackoverflow.com/q/3345268/953140) – Ahamed 2012-01-28 06:42:33

+0

这是一个sql server 2008的问题 – user980191 2012-01-28 06:42:52

回答

0

显然,你只需要行其列2的值是您将只剩下你想要的行2和6

Delete from your_table 
Where column2<2 or column2>6 

现在之间

,你可以选择现在都:

Select column1, column2 
From yourtable 
+0

或'从你的表中删除 (1,7)' – jjj 2012-01-29 06:15:27

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 
+1

的列在哪里我不同意你的命名约定:'C'会是一个更自然的选择'COUNT(*)',而不是'D',并且为了避免可能的混淆,'C' CTE可以被命名为'E'!只是开玩笑:)这是一个(其他)实际使用CTE的好例子! – 2012-01-28 16:15:55

+1

@AndriyM - 好吧,我会在名称上工作:)。我猜在这种情况下'D'可能是'DuplicateCount'的缩写。 'C'实际上是一个很好的名字,当它是表'T' :)的派生表时。 – 2012-01-28 16:39:51