【问题标题】:How to select from a table adding a sequence column?如何从添加序列列的表中进行选择?
【发布时间】:2017-06-17 13:33:55
【问题描述】:

给定Sybase数据库中的一个表MY_TABLE,由COLUMN_ACOLUMN_BCOLUMN_CSORTER_COLUMN组成,我想选择如下:

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。但我需要一种解决方案,将序列直接添加到选择中,而无需插入表中。

【问题讨论】:

    标签: sql tsql sequence sybase sap-ase


    【解决方案1】:

    使用每行递增的局部变量。在 FROM 子句中初始化它,你必须给它一个别名。

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

    【讨论】:

    • 看起来像 [MySQL] 语法
    【解决方案2】:

    如果您使用更高版本的 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 15.7 Adaptive Server Enterprise 15.7,但不支持这两个功能。
    • 我添加了一个解决方案。检查更新的答案
    • 这绝对是我需要的!谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2020-04-05
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2020-02-05
    • 2010-12-06
    相关资源
    最近更新 更多