【问题标题】:"Duplicating" entries SQL\"复制\"条目 SQL
【发布时间】:2023-02-08 22:05:46
【问题描述】:

我有一个看起来像的专栏

a
b
c

我想我可以选择使用某种窗口函数来获取

a  1
a  2

b  1
b  2

c  1
c  2

但似乎找不到合适的东西。

我知道您可以使用联合来执行此操作,但如果存在,则更愿意使用窗口函数。

【问题讨论】:

  • 这不是你想要的窗口函数,它是CROSS JOINVALUES12
  • “我知道你可以使用工会来做到这一点”- 我不明白如何使用 UNION 代替 ROW_NUMBER() - 集合操作与窗口函数正交。
  • 谢谢@Larnu。你想写出来让我接受吗?

标签: sql sql-server


【解决方案1】:
select t.myColumn, x.N
from myTable t
CROSS JOIN
(SELECT TOP (2)
            ROW_NUMBER() OVER (ORDER BY t1.Object_ID) AS N
            FROM Master.sys.All_Columns t1
            CROSS JOIN Master.sys.All_Columns t2) x

【讨论】:

    【解决方案2】:

    要多次重复单个列中的值,可以将 row_number() 窗口函数与子查询结合使用。这是一个使用表 t 的示例:

    select t.col, row_number() over (partition by t.col order by t.col) as seq_num
    from (select distinct col from t) t
    

    这将创建一个从 col 列中选择唯一值的子查询。然后外部查询选择这些值并使用 row_number() 窗口函数添加一个序列号。窗口函数中的 partition by 子句定义了用于计算序列号的列,在本例中为 col 列。 order by 子句定义了序列号分配给每一行的顺序。

    这将产生以下结果:

    col  seq_num
    ---  -------
    a         1
    a         2
    b         1
    b         2
    c         1
    c         2
    

    【讨论】:

    • ROW_NUMBER 不创建行。 db<>fiddle 老实说,这闻起来更像是 ChatGPT 会吐出来的垃圾。
    猜你喜欢
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2022-10-24
    • 2011-09-06
    • 2018-07-11
    相关资源
    最近更新 更多