2013-07-24 37 views
0

愚蠢的問題,答案可能不存在(!!!!喘氣呻吟咬牙切齒牙)SELECT TOP 1,2,從TableWithNRows 3個RowId的

我有一個選擇:

SELECT * FROM SockDrawer WHERE Color = 'red' 

這導致(很多其他的結果太)3行與33896,35901,37903 行ID

我想是這樣的:

DECLARE @ROWID INT --- HOW DO I USE ARRAYS? I'll google but an example would help. 
DECLARE @COUNT INT 
DECLARE @LIMIT INT 

SELECT * FROM SockDrawer WHERE Color = 'red' 
--(Returns 3 rows. With 3 RowId's 33896, 35901, 33896) 

SET @LIMIT = @@ROWCOUNT 

SET @COUNT = 1 
WHILE @COUNT < @LIMIT BEGIN 
    SET @ROWID[0] = (SELECT SockKey From SockDrawer WHERE RowID = 33896) 
    SET @ROWID[1] = (SELECT SockKey From SockDrawer WHERE RowID = 35901) 
    SET @ROWID[2] = (SELECT SockKey From SockDrawer WHERE RowID = 33896) 
    SET @Count = @Count + 1 
END 
GO 

Then I need to: 


SET @COUNT = 0 
WHILE @COUNT < @LIMIT 
    BEGIN 
     DELETE FROM SockDrawer WHERE RowID = @ROWID[@COUNT] 
    END 
GO 

訣竅是我永遠不會知道我是在處理1行刪除還是50.

我是個傻瓜。我可以改變。如果我想。

+1

你能解釋爲什麼這三個特定行比其他所有行的顏色='紅色'更重要嗎? –

+0

這就是所有的行。我只需要這些ID,因爲我必須使用它們來獲取該循環內部的其他SQL。所以我需要爲每個匹配的襪子使用每個RowId。這個想法是,我有一堆垃圾箱,每天我必須平衡每個垃圾箱,所以它有每種顏色1。這可能每天發生幾次。我認爲襪子應該是一個簡單的背景。 – TooMuchToLearn

+0

那麼,爲什麼你不說明你的實際問題(我需要刪除行,以便每個顏色只剩下一行),而不是說「如何使用數組,這裏是一些非工作代碼嘗試「? –

回答

1

如果你不關心它襪子留給每一種顏色,然後:

;WITH x AS 
(
    SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY Color ORDER BY RowID) 
    FROM dbo.SockDrawer 
) 
DELETE x WHERE rn > 1; 

如果你關心你把哪一個,相應地調整ORDER BY