【问题标题】:Can cross join work with window function like - row_number() function可以与窗口函数交叉连接工作​​,如 - row_number() 函数
【发布时间】:2015-03-13 06:34:26
【问题描述】:

不能在 where 子句中使用窗口函数。在下面的查询中,rn 列只能在外部查询中的 where 子句中使用,例如 -

select * from (
select *, row_number() over (partition by col1 order by col1) as rn 
from tab1) as abc
where rn = 1

我们可以使用带有交叉连接的 rn 列吗?比如 -

select *, row_number() over (partition by col1 order by col1) as rn 
from tab1 as a
cross join(select rn from a)

Just curious to know as i am trying to learn SQL server

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    你不能这样做。您要么必须在子查询中重复 ROW_NUMBER()

    SELECT *, ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) AS rn 
    FROM tab1 AS a
    CROSS JOIN (SELECT ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) AS rn FROM tab1) t
    

    或者,或者,使用通用表表达式

    ;WITH a AS (
       SELECT *, ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) AS rn 
       FROM tab1
    )
    SELECT *
    FROM a
    CROSS JOIN (SELECT rn FROM a) t
    

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多