Sql server 2005 从表格WithnRows中选择前1、2、3行ID
愚蠢的问题和答案可能不存在!呻吟咬!牙齿 我有一个选择:Sql server 2005 从表格WithnRows中选择前1、2、3行ID,sql-server-2005,loops,Sql Server 2005,Loops,愚蠢的问题和答案可能不存在!呻吟咬!牙齿 我有一个选择: SELECT * FROM SockDrawer WHERE Color = 'red' 这将产生3行,行ID为338963590137903 还有很多其他的结果 我想要的是这样的东西: DECLARE @ROWID INT --- HOW DO I USE ARRAYS? I'll google but an example would help. DECLARE @COUNT INT DECLARE @LIMIT INT SELE
SELECT * FROM SockDrawer WHERE Color = 'red'
这将产生3行,行ID为338963590137903
还有很多其他的结果
我想要的是这样的东西:
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行
我是个笨蛋。我可以改变。如果我想的话
如果您不在乎每种颜色剩下哪只袜子,那么:
;WITH x AS
(
SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY Color ORDER BY RowID)
FROM dbo.SockDrawer
)
DELETE x WHERE rn > 1;
如果您关心保留哪一行,请相应地调整顺序。您能解释一下为什么这三行比颜色为“红色”的所有其他行更重要吗?这就是所有行。我只需要ID,因为我必须使用它们在该循环中激发一些其他SQL。所以我需要每一只匹配袜子的RowId。我的想法是,我有一堆垃圾箱,每天我都要平衡每个垃圾箱,这样每个垃圾箱就有一种颜色。这种情况一天可能发生几次。我认为socks应该是一个简单的上下文。那么,为什么不说明你的实际问题呢?我需要删除行,这样每种颜色只剩下一行,而不是说我如何使用数组,这里是一些我尝试过的不起作用的代码。我很抱歉。我在试着训练一个新的文学学士。我必须为主人的姐妹计算机运行桌面支持,我花了3个小时来输入您在上面看到的内容,没有中断。