当前位置: 首页 > 面试题库 >

根据位置SQL Server重新排序行

梁浩
2023-03-14
问题内容

我在SO上看到了很多与此问题有关的问题,但都与我的情况无关。除了进行基本的CRUD操作外,我与SQL专家们无二。因此,我对此非常执着。

我有一张表。

myTable [rID, newsID, OrderPosition] 在哪里;

rID is primaryKey int column, 
newsID int is the ID of an item from another table and,
OrderPosition int to hold the position of the rows.

myTable始终总有10行。

因此,首先,假设myTable具有以下数据:

rID    newsID    OrderPosition
100    4000      1
101    4100      2
102    4200      3
103    4300      4
104    4400      5
105    4500      6
106    4600      7
107    4700      8
108    4800      9
109    4900      10

预期的功能应如下所示;

插入新

当插入新项目时,用户应该能够将其插入到他/她想要的任何位置。现在,我仅设法通过删除OrderPosition =
10行,将新记录的OrderPosition分配为0并对表重新排序来将新记录插入到第一个位置。但是客户希望选择物料应移至哪个位置。在这种情况下,我假设OrderPosition
= 10将再次被删除?

删除

当从该表中删除一条记录时,由于总会有10条记录,因此我需要从另一个表[tblNews]中获取最新输入的记录,并将其插入到第10个位置(我可以从tblNews中获取最后一条记录)由于我不知道它们将删除哪条记录,因此我不知道在删除记录后如何对表重新排序。

任何帮助,代码,文章的方向将不胜感激。

===========编辑====================

答案中提到的UPDATE方法对我不起作用;因为
例如,用户想要将新记录插入5阶位置。这意味着将删除订单头寸10,并将当前位置为5、6、7、8和9的记录增加1。


问题答案:

插入行时,您需要“移动”下面的行以为其留出空间。例如,可以像这样在位置4上插入:

DELETE FROM myTable WHERE OrderPosition = 10; -- If you want the keep the table from growing beyond 10 rows.
UPDATE myTable SET OrderPosition = OrderPosition + 1 WHERE OrderPosition >= 4;
INSERT INTO myTable VALUES (..., 4);

相反,删除该行后,可以将其“下方”的行向上备份:

DELETE FROM myTable WHERE OrderPosition = 4;
UPDATE myTable SET OrderPosition = OrderPosition - 1 WHERE OrderPosition > 4;
-- Now you can insert the row on position 10 if desired.

请注意,即使OrderPosition对其具有UNIQUE约束,UPDATE也不会违反它。

[SQL提琴]



 类似资料:
  • 问题内容: 我有一个集合,一个对象(无序) 的ID 属性,一个(有序)列表 的ID 。 ID列表未排序 。我想在我的收藏夹中创建一个对象列表,并根据ID列表进行排序。 我在Guava或Apache Commons中没有看到用于此目的的方法-但这正是我想要的。具有良好实现的库函数。 问题答案: 听起来您的ID列表有自己的顺序;您不仅在使用自然顺序,对吗? 这是番石榴解决方案: 而已。没什么 (公开:

  • 我正在解决一个问题“编写一个名为splay的函数,根据第一个值重新组织列表。第一个值称为splaymaster。该函数将重新排列列表,使splaymmaster之前的所有值都小于或等于splaymast,之后的所有值均大于splaymMaster。该函数还返回列表被重新排列。例如,如果列表为[8,15,4,48,26,45,18,29,2,1],函数将重新排列为[2,1,4,8,26,4518,2

  • 问题内容: 因此,此脚本返回以下内容: 这很合情理,只是我希望它返回此值: 我希望它在击中一组新香蕉时重新开始计数。显然,我的数据并不是真正的香蕉,但它使可视化变得容易。 香蕉的这种复发被认为是新出现的,因此,我们希望在看到这种情况时从一个开始计数。我一直在绞尽脑汁,想不出一个好方法来做到这一点。我了解为什么它不起作用,但是想不出一种使它起作用的方法。关于最佳方法的任何建议吗? 问题答案: 有几种

  • 问题内容: 我确信这个问题以前可能已经被问过,但我似乎找不到正确的答案。如果我有两个清单 我正在尝试使用_list1重新排列_list2中的元素,以便它们完全匹配顺序。什么是最干净的方法?所需的输出: 很抱歉,如果这是重复的,但到目前为止,我只能使用压缩的sorted()方法找到数字列表的答案。 如果_list2是列表列表怎么办? 所需输出: 还有一个假设:如果我想使用_list1作为键对其他任何

  • 如果我使用,我的数据有3586列。如何重新排序数据序列? 我使用了这个(基于此问题,根据列名对pandas dataframe中的列重新排序),但仍不起作用。 谢谢你们

  • 问题内容: 我有一个带有自动递增主键的MySQL表。我删除了表中间的一些行。例如,现在在ID列中有类似的内容:12、13、14、19、20。我删除了15、16、17和18行。 我想重新分配/重置/重新排序主键,以便保持连续性,即将19设为15,将20设为16,依此类推。 我该怎么做? 问题答案: 您可以删除主键列并重新创建它。然后应按顺序重新分配所有ID。 但是,在大多数情况下,这可能不是一个好主