ROW_NUMBER 个新列

发布于 2024-11-30 04:54:15 字数 180 浏览 4 评论 0原文

是否可以按 row_number 内的新列进行排序? 我想做这样的事情:

select text1 + text2 as NEW_TEXT, row_number over (order by NEW_TEXT) from table

但是这样的排序不起作用(我得到随机结果)。

Is it possible to order by a new column inside row_number?
I would like to do something like this:

select text1 + text2 as NEW_TEXT, row_number over (order by NEW_TEXT) from table

but such sorting doesn't work (I get random results).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

翻了热茶 2024-12-07 04:54:15

您必须重复表达式 text1 + text2

select text1 + text2 as NEW_TEXT, 
row_number() over (order by text1 + text2)
from table

或分步执行(foo 可能是这里的 CTE)

SELECT
    NEW_TEXT,
    row_number() over (order by NEW_TEXT)
FROM
    (
    select text1 + text2 as NEW_TEXT from table
    ) foo

You have to repeat the expression text1 + text2

select text1 + text2 as NEW_TEXT, 
row_number() over (order by text1 + text2)
from table

Or do it in steps (foo could be a CTE here)

SELECT
    NEW_TEXT,
    row_number() over (order by NEW_TEXT)
FROM
    (
    select text1 + text2 as NEW_TEXT from table
    ) foo
只为守护你 2024-12-07 04:54:15

另一种选择是将初始结果包装在子选择中,并在此子选择上应用ROW_NUMBER

SQL语句

SELECT  NEW_TEXT
        , ROW_NUMBER() OVER (ORDER BY NEW_TEXT)     
FROM    (       
            SELECT  text1 + text2 AS NEW_TEXT       
            FROM    [table]
        ) q         

测试数据

;WITH [table] (text1, text2) AS (
    SELECT '1', '1'
    UNION ALL SELECT '1', '0'
    UNION ALL SELECT '2', '2'
    UNION ALL SELECT '2', '1'
)
SELECT  NEW_TEXT
        , ROW_NUMBER() OVER (ORDER BY NEW_TEXT)     
FROM    (       
            SELECT  text1 + text2 AS NEW_TEXT       
            FROM    [table]
        ) q         

Another option would be to wrap your initial results in a subselect and apply the ROW_NUMBER on this subselect.

SQL Statement

SELECT  NEW_TEXT
        , ROW_NUMBER() OVER (ORDER BY NEW_TEXT)     
FROM    (       
            SELECT  text1 + text2 AS NEW_TEXT       
            FROM    [table]
        ) q         

Test Data

;WITH [table] (text1, text2) AS (
    SELECT '1', '1'
    UNION ALL SELECT '1', '0'
    UNION ALL SELECT '2', '2'
    UNION ALL SELECT '2', '1'
)
SELECT  NEW_TEXT
        , ROW_NUMBER() OVER (ORDER BY NEW_TEXT)     
FROM    (       
            SELECT  text1 + text2 AS NEW_TEXT       
            FROM    [table]
        ) q         
当梦初醒 2024-12-07 04:54:15

您可以使用子查询来完成此操作,如下所示:

select NEW_TEXT, row_number() over (order by NEW_TEXT)
from
(
    select Text1 + Text2 as NEW_TEXT
    from TestTable
) TempTable

You can do it using sub query like this way :

select NEW_TEXT, row_number() over (order by NEW_TEXT)
from
(
    select Text1 + Text2 as NEW_TEXT
    from TestTable
) TempTable
转身泪倾城 2024-12-07 04:54:15
select text1 + text2 as NEW_TEXT, 
row_number over (order by text1 + text2) 
from table
select text1 + text2 as NEW_TEXT, 
row_number over (order by text1 + text2) 
from table
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文