如何从select中添加一个table序列列?

How to select from a table adding a sequence column?

给定一个 Sybase 数据库中的 table MY_TABLE,由 COLUMN_ACOLUMN_BCOLUMN_CSORTER_COLUMN 组成,我想要select 如下:

SELECT COLUMN_A, COLUMN_B, SORTER_COLUMN, SEQUENCE
FROM MY_TABLE
WHERE COLUMN_C = 'SOMETHING'
ORDER BY SORTER_COLUMN

其中 SEQUENCE 表示按 SORTER_COLUMN 排序的序列 - 从 1、2、3 等开始。我怎样才能在 Sybase 中实现它?

我曾经将记录插入到一​​个新的 table 中,其中包含定义为 IDENTIFIER 的列 SEQUENCE。但是我需要一个解决方案来直接将序列添加到 select 而不必插入到 table.

使用每行递增的局部变量。在 FROM 子句中初始化它,您必须在其中为其指定别名。

SELECT COLUMN_A, COLUMN_B, SORTER_COLUMN, (@n := @n + 1) AS SEQUENCE
FROM MY_TABLE, (SELECT @n := 0) as WHATEVER;

如果您使用更高版本的 Sybase(至少版本 12),您可以使用 NUMBER(*) 函数:

SELECT COLUMN_A, COLUMN_B, SORTER_COLUMN, Number(*) as SEQUENCE
FROM MY_TABLE
WHERE COLUMN_C = 'SOMETHING'
ORDER BY SORTER_COLUMN

ROW_NUMBER()函数

SELECT COLUMN_A, COLUMN_B, SORTER_COLUMN, ROW_NUMBER() OVER (ORDER BY SORTER_COLUMN) SEQUENCE
FROM MY_TABLE
WHERE COLUMN_C = 'SOMETHING'
ORDER BY SORTER_COLUMN

更新:

正如 amyassin 在下面评论的那样,尽管规范中记录了上述两个函数,但它们在 Sybase 15.7 中不起作用。因此,我认为您唯一的选择是使用相关查询,如下所示:

SELECT b.COLUMN_A, b.COLUMN_B, b.SORTER_COLUMN, 
(select count(*)+1 from MY_TABLE a where a.SORTER_COLUMN < b.SORTER_COLUMN) as SEQUENCE
FROM MY_TABLE b
WHERE b.COLUMN_C = 'SOMETHING'
ORDER BY b.SORTER_COLUMN