gpt4 book ai didi

sql-server - 如何使用交叉应用到多行?

转载 作者:行者123 更新时间:2023-12-03 02:29:55 24 4
gpt4 key购买 nike

我有这张表:

;WITH cte AS (
SELECT Name='john' , Times=1
UNION ALL
SELECT 'paul' ,2
UNION ALL
SELECT 'george' , 3
UNION ALL
SELECT 'ringo' , 1
)

enter image description here

我想显示每一行,Times次:

John 1
Paul 2
Paul 2
george 3
george 3
george 3
ringo 1

所以我知道如果我写Cross apply像:

SELECT *
FROM cte
CROSS APPLY(
SELECT 1 AS ca
UNION
SELECT 2
) y

然后每行将显示2次。

enter image description here

但我不想两次。我想要

问题

如何增强我的查询来做到这一点?

注:

我想到的一个非智能解决方案是创建一个 udf,为 n 参数创建 Times 行 - 然后在 Cross Apply 我只是这样做: select * from udf_toTable(Times))

最佳答案

;WITH cte AS (
SELECT Name='john' , Times=1
UNION ALL
SELECT 'paul' , Times=2
UNION ALL
SELECT 'george' , Times=3
UNION ALL
SELECT 'ringo' , Times=1
),
multi as
(
select
Name, Times, Times as num
from cte
union all
select
Name, Times, num - 1
from multi
where num > 1
)
select Name, Times from multi
order by Name

更新

没有递归

;WITH cte AS (
SELECT Name='john' , Times=1
UNION ALL
SELECT 'paul' , Times=2
UNION ALL
SELECT 'george' , Times=3
UNION ALL
SELECT 'ringo' , Times=1
)
select cte.*
from cte join
-- generate sequence of numbers 1,2 ... MAX(Times)
(select top (select MAX(Times) from cte) ROW_NUMBER() over (order by object_id) rowNum from sys.objects) t
on cte.Times >= t.rowNum
order by name

关于sql-server - 如何使用交叉应用到多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30324797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com