Chr*_*ris 1 sql sql-server common-table-expression
对于稍微复杂的SQL脚本,我需要以下映射:
WITH days_mapping AS (SELECT 1 AS day
UNION ALL
SELECT 2 AS day
UNION ALL
...
SELECT 31 AS day)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以创建相同的映射,但是无需手动为该映射中的每个数字/天手动编写SELECT和UNION ALL?我当时想在WHILE循环中执行INSERT而不是SELECT,但是我不知道如何或是否有可能使用通用表表达式来执行此操作。
您可以使用递归CTE:
with days_mapping as (
select 1 as day
union all
select day + 1
from days_mapping
where day < 31
)
select *
from days_mapping;
Run Code Online (Sandbox Code Playgroud)
这是db <>小提琴。
注意:如果要生成的行超过100行,则需要option (maxrecursion 0)在查询末尾使用。