如何从添加序列列的表中进行选择?

时间:2017-01-31 22:56:04

标签: sql tsql sequence sybase sybase-ase

给定Sybase数据库中的表MY_TABLE,包括COLUMN_ACOLUMN_BCOLUMN_CSORTER_COLUMN,我想选择如下:< / p>

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中实现这一目标?

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

2 个答案:

答案 0 :(得分:1)

如果您使用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

答案 1 :(得分:-1)

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

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