2011-09-02 60 views
0

我有一个带有(第一,第二)列的表T.我有两行,第一个= 1,第二个= 2。我想删除其中的一行。我怎么做?从相同行中删除一行

+0

请指定您正在使用的SQL Server版本。 –

回答

4
;WITH CTE AS 
(
SELECT TOP 1 * 
FROM YourTable 
WHERE first=1 and second=2 
) 
DELETE FROM CTE; 

或者,如果SQL Server 2000的

DELETE T 
FROM (
    SELECT TOP 1 * 
    FROM YourTable 
    WHERE [first]=1 and [second]=2 
) T; 

然后添加一个主键。

+0

这是删除的目的.. – Naor

3

您可以使用ROW_NUMBER()。

DECLARE @T as Table(First int , Second int) 

INsert Into @T 
Values (1,2), 
(1,2) 

SELECT * FROM @T 

;WITH CTE as 
(SELECT ROW_NUMBER() over (order by first,second) rn , * from @T) 

DELETE FROM CTE where rn = 1 

select * from @T 

如果你改变RN包括由

ROW_NUMBER() over (PARTITION BY first, second order by first,second)

分区,改变在哪里是WHERE RN <> 1

,你可以使用它作为一个通用的解决方案,以消除一是任何受骗者,秒

+0

对不起,花了我一秒钟的时间才知道他在问什么...... – EJC

+0

不幸的是,在最后的演出中,我们有一系列没有PK的表格,无法更正,所以我必须创建视图,通过row_number定义一个“唯一”值,就像这个答案提出的那样。丑,hacktastic,但它的作品。 – billinkc

+0

@EJC。没什么大不了。你通过删除你的答案做了正确的事情。我有很多类似删除的答案,我的自我 –