【问题标题】:Create a sequence from the starting and ending values in a SQL Server 2008 table?从 SQL Server 2008 表中的起始值和结束值创建序列?
【发布时间】:2017-06-18 01:05:24
【问题描述】:

我使用的是 SQL Server 2008。我有一个表temp

select * from temp

返回这个:

name    start_limit   end_limit
-------------------------------
j       2             7
t       1             9

现在我想生成以下序列

name    allowed values
----------------------
j       2
j       3
j       4
j       5
j       6
j       7
t       1
t       2
t       3
t       4
t       5
t       6
t       7
t       8
t       9

我该怎么办?

【问题讨论】:

标签: sql sql-server database sql-server-2008 sequence


【解决方案1】:

这将完美地工作:

;with a as(
select name,start_limit as [allowed values] from temp
union all
select b.name,a.[allowed values]+1 as [allowed values] from temp b inner join a on b.name=a.name and b.end_limit>a.[allowed values]
)
select * from a order by name,seq;

【讨论】:

    【解决方案2】:

    这是使用 tally 表的一种方法不需要递归

    ;WITH E1(N) AS (
                     SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
                     SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
                     SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
                    ),                          --10E+1 or 10 rows
           E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
           E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
    cteTally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4)
    SELECT a.name,c.N
    FROM   ctetally c
           JOIN Yourtable a
             ON c.N BETWEEN a.start_limit AND a.end_limit 
    

    【讨论】:

      猜你喜欢
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      相关资源
      最近更新 更多