2011-06-30 18 views
1

可以说我有一个有20行的列(它更多,但是这个概念将适用于20)。目前,该列的唯一编号为1-20。我需要弄清楚一个查询,尽管这会将数字方案从顺序改为顺序,只是偶数或奇数。一个SQL查询重新排列一个列的数量是奇数还是全部甚至是

因此,例如我只需要在一个表中创建一个列,它在偶数或奇数编号。因此,更新查询运行后,它会将我的列数据从1-20更改为2-40(仅限偶数)或1-39(仅限奇数)。

对不起,如果这没有意义,或者如果你不能想出为什么我需要这个理由,但以一种奇怪的方式,我确实需要它。

编辑:

由于这样的事实,这是没有意义的,我会尽力和澄清多一点。

我有一个正在有序1-10

1,2,3,4,5,6,7,8,9,10列。

我想在列执行更新查询,以便它看起来像这样:

1,3,5,7,9,11,13,15,17,19

2,4,6,8,10,12,14,16,18,20

是否有更新查询,我可以运行这样做?

+3

对我没有意义 - 样本数据和预期的输出会真的有帮助 –

+0

如果没有意义,我很抱歉,我更新了问题以澄清一点。谢谢 –

回答

1

对于偶数:

UPDATE YourTable 
    SET YourColumn = YourColumn * 2; 

对于奇数号码:

UPDATE YourTable 
    SET YourColumn = YourColumn * 2 - 1; 

只能遇到麻烦,如果你的DBMS开始太快检查专栏的唯一性,这最终是DBMS的缺陷(或限制)。即:'even'更新正在运行时,可能有一个尚未更新的行包含值2以及已更新的包含值2(最初为1)的行。如果数据库管理系统在每一行强制执行唯一性,则会失败;但DBMS不应该这样做。

+0

如果'YourColumn'有独特的约束,UPDATE将失败,对吧? –

+0

在检查唯一性的情况下,可以分两步进行。像“SET YourColumn = YourColumn * -2”,后面跟着“SET YourColumn = YourColumn * -1”。 –

+0

是对的,一个体面的RDBMS不应该失败。尽管MySQL会失败(但是可以使用UPDATE中ORDER BY的附加“特性”来避免失败)。 –

1

您可以按照您喜欢的任何顺序显示您的行。

行排序甚至IDS第一:

SELECT * 
FROM yourTable 
ORDER BY id MOD 2 
     , id 
+0

谢谢!排序是我错过的。更新声明会有什么不同?这真的是我想要做的是通过更新声明订购一个列 –

+0

这没有任何意义。请用数据样本编辑您的问题。你有什么和你想要的结果(用SELECT显示或用UPDATE更改)。 –

+1

@Stephen J .:您不能使用更新声明对列进行订单。您在SELECT语句中使用'ORDER BY'子句在列上施加顺序。在您提供的样本数据中,即使值已更改,现有订单和所需订单也是相同的。 –

相关问题