2013-04-06 181 views
1

我通过一个表行要循环..我重新排序“表单选项”通过设定的OrderID到@NUMCOUNT ...SQL:重新排序列表顺序

我希望能够重新安排我的列表的顺序。我需要这样做的原因是因为如果我删除一个表格选项,那么它将失序..即(1,2,3,5)..我会想要(1,2,3,4)..等。

实施例的表:

ID的OrderID FormOption

1 1名称

2 3地址2

3 2地址1

DECLARE @NUMCOUNT int 
SET @NUMCOUNT = 0 
WHILE (SELECT Count(OrderID) FROM FormOptions WHERE ProductID=1) > @NUMCOUNT 
BEGIN 
    SET @NUMCOUNT = @NUMCOUNT + 1 
    PRINT 'The count is ' + CAST(@NUMCOUNT as char) 
    UPDATE FormOptions SET OrderID = @NUMCOUNT WHERE ID=???? 
END 
+3

不明白1,2,3,5仍然是有序的。你想重新分配你的所有orderID值是连续的? – OldProgrammer 2013-04-06 22:34:41

+0

“SQL”的意思是“Transact-SQL”吗? – ruakh 2013-04-06 22:42:01

+0

是的! T-SQL ...的东西是..当我添加一个项目..它计数...所以我有4 ..然后它添加到此列表中,并有2 5 ..所以我想重新排序列表。 – mrjamiebowman 2013-04-06 22:55:40

回答

0

我建议单独离开OrderId,因为@OldProgrammer已经表示他们仍然会按顺序加上(除非我错过了某些东西),这似乎会增加不必要的开销。

如果你真的想有连续的数字,想必,以用于演示,则要么推说给表示层,或创建一个视图,它会做类似

SELECT 
    ROW_NUMBER() AS OrderNumber 
    , OtherColumn 
FROM FormOptions 
ORDER BY OrderID 
+0

事情是..我需要能够重新排列此列表.. – mrjamiebowman 2013-04-06 23:13:20

+0

ID订单ID FormOption 1 1名称 2 3地址2 3 2地址1 – mrjamiebowman 2013-04-06 23:13:57

+0

重新排列列表从哪里,何时以及如何。例如,如果我将项目设置为8,那么它们是否会切换位置或全部“向下移动”?只有一个项目一次移动?当你添加一个项目而不是使用'COUNT + 1'时,为什么不使用'MAX + 1'? – 2013-04-06 23:31:50

0

我会建议对不使用计数订购。在过去,我根据用户的决定订购了多列用于订购。

快速解决问题的一个选择是给出一个orderID> Max(orderID)这样可以确保每个新项目的orderID大于最高值,无论列表中的项目数量如何。

然后,您可以有一个列仅用于排序目的,并允许用户设置事物的顺序。

有时更容易(更好)想如何可以改变你在做什么,而不是代码做你的想法:)

1

我猜你的东西,需要工作允许从有序列表中删除并插入到特定位置的有序列表中。删除并不需要使订单密集,但它可以完成:

delete from FormOptions 
    where OrderId = @SelectedFormOption 
update FormOptions 
    set OrderId = OrderId - 1 
    where OrderId > @SelectedFormOption 

您可能希望将其包装在事务中。 (请确保您了解的交易,因为这是相当重要的。)

插入是类似的:

update FormOptions 
    set OrderId = case when OrderId = @TargetA then @TargetB else @TargetB end 
    where OrderId in (@TargetA, @TargetB) 

update FormOptions 
    set OrderId = OrderId + 1 
    where OrderId >= @TargetOrderId 
insert into FormOptions 
    (OrderId, ...) values (@TargetOrderId, ...) 

交换顺序位置可以原子在一个更新完成可以编写类似的update以将单个表单选项向上或向下移动一个位置。