SQL:为每2行数据分配2行唯一ID

时间:2016-10-27 16:44:57

标签: sql case uniqueidentifier

我认为我的标题有点笨拙,但这是我的问题:

我有一个Sybase表,如下所示,每2行需要一个unique ID,它与表中的其他2行分开。因此,第1行和第2行需要ID,这与第3行和第4行以及表的其余部分不同。 “符号”可以重复。总是有一个“B”和一个“S”相互连接但没有当前的ID来连接它们。 ExecID和OrderID并不总是真正的顺序(即010001,010002),而是按顺序排列。我尝试了CASE WHEN的一些变体,但我想不出任何可以解决问题的方法。

这样做的最佳方式是什么?

Symbol | Sell-Buy | ExecId   | OrderId   | RowNum |
---------------------------------------------------
W      | B        | 64240624 | 101773407 | 1      |
W      | S        | 64240625 | 101773408 | 2      |
XM     | B        | 64240626 | 101773409 | 3      |
XM     | S        | 64240627 | 101773410 | 4      |
GV     | B        | 64240628 | 101773411 | 5      |
GV     | S        | 64240629 | 101773412 | 6      |

....

W      | B        | 64240679 | 101773455 | 49     |
W      | S        | 64240680 | 101773456 | 50     |

输出目标:

Symbol | Sell-Buy | ExecId   | OrderId   | RowNum | 2RowId |
------------------------------------------------------------
W      | B        | 64240624 | 101773407 | 1      | 000001 |
W      | S        | 64240625 | 101773408 | 2      | 000001 |
XM     | B        | 64240626 | 101773409 | 3      | 000002 |
XM     | S        | 64240627 | 101773410 | 4      | 000002 |

....

W      | B        | 64240679 | 101773455 | 49     | 000025 |
W      | S        | 64240680 | 101773456 | 50     | 000025 |

1 个答案:

答案 0 :(得分:1)

您可以在这里使用的一个技巧是将当前行数的上限除以2:

UPDATE yourTable
SET 2RowId = CEILING(RowNum / 2)

这是一个表格,显示数学应该如何解决:

RowNum | RowNum/2 | ceiling(RowNum/2)
1      | 0.5      | 1
2      | 1        | 1
3      | 1.5      | 2
4      | 2        | 2
...    | ...      | ...