如何从select中添加一个table序列列?
How to select from a table adding a sequence column?
给定一个 Sybase 数据库中的 table MY_TABLE
,由 COLUMN_A
、COLUMN_B
、COLUMN_C
、SORTER_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
给定一个 Sybase 数据库中的 table MY_TABLE
,由 COLUMN_A
、COLUMN_B
、COLUMN_C
、SORTER_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