2017-02-01 1 views
3

Я использую SQL Server 2008. У меня есть таблица temp:Создайте последовательность из начального и конечного значений в таблице SQL Server 2008?

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 

Что должен Я делаю?

+0

Это, вероятно, поможет http://stackoverflow.com/questions/21425546/ как к генерации-а-спектр-о-чисел-между-двумя номерами-в-SQL-сервера – DavidG

ответ

3

Это будет работать отлично:

;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; 
3

Вот один из способов, используя индикаторную таблицу не рекурсия не требуется

;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 
Смежные вопросы