SQL:每2行数据分配一个2行唯一ID
SQL: Assigning a 2 row unique ID for every 2 rows of data
我觉得我的标题措辞有点尴尬,但这是我的问题:
我有一个如下所示的 Sybase
table,其中每 2 行需要有一个 unique ID
,它与 table 中的其他每 2 行分开。因此第 1 行和第 2 行需要一个 ID
,它不同于第 3 行和第 4 行以及 table 的其余部分。 "Symbol" 可以重复。总是有一个 "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 |
您可以在此处使用的一个技巧是将当前行号的上限除以 2:
UPDATE yourTable
SET 2RowId = CEILING(RowNum / 2)
这里 table 展示了数学应该如何计算:
RowNum | RowNum/2 | ceiling(RowNum/2)
1 | 0.5 | 1
2 | 1 | 1
3 | 1.5 | 2
4 | 2 | 2
... | ... | ...
我觉得我的标题措辞有点尴尬,但这是我的问题:
我有一个如下所示的 Sybase
table,其中每 2 行需要有一个 unique ID
,它与 table 中的其他每 2 行分开。因此第 1 行和第 2 行需要一个 ID
,它不同于第 3 行和第 4 行以及 table 的其余部分。 "Symbol" 可以重复。总是有一个 "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 |
您可以在此处使用的一个技巧是将当前行号的上限除以 2:
UPDATE yourTable
SET 2RowId = CEILING(RowNum / 2)
这里 table 展示了数学应该如何计算:
RowNum | RowNum/2 | ceiling(RowNum/2)
1 | 0.5 | 1
2 | 1 | 1
3 | 1.5 | 2
4 | 2 | 2
... | ... | ...