2011-10-26 2 views
1

Я хочу получить полную цифровую шкалу от 0 до максимального числа в таблице.Как выполнить полную серию в sql

Скажем, у нас есть таблица T с двумя полями имени х и у

select x,y 
from t 

бы показать нам позволяет сказать, что результаты

X Y 
3 11 
5 23 
7 45 
9 1 
10 34 

я нашел этот запрос для создания порядковых номеров:

With T_Misparim As 

(Select 1 N 
Union All 
Select N+1 N 
From T_Misparim 
Where N<1000) 
Select N 
From T_Misparim 
Option (MaxRecursion 0); 

от этого источника: http://www.sqlserver.co.il/?p=3296

Моя Суть заключается в том, как я интегрировать эти два запросов в один запрос, чтобы дать правое внешнее соединение:

N X Y 
0 null 0 
1 null 0 
2 null 0 
3 3 11 
4 null 0 
5 5 23 
6 null 0 
7 7 45 
8 null 0 
9 9 1 
10 10 34 

ответ

1

Вы можете просто LEFT JOIN с порядковым номером КТР;

select 3 as X, 11 as Y into #TEST 
insert #TEST values (5,23),(7,45),(9,1),(10,34) 

;with NUMS(n) as (
    select 0 union all 
    select 1 + n from NUMS where n < 50 
) 
select 
    NUMS.n N, 
    T.X, 
    isnull(T.Y, 0) Y 
from NUMS 
    left join #TEST T on (T.X = NUMS.n) 
option (maxrecursion 50) 

Для

N X Y 
0 NULL 0 
1 NULL 0 
2 NULL 0 
3 3 11 
4 NULL 0 
5 5 23 
6 NULL 0 
7 7 45 
8 NULL 0 
9 9 1 
10 10 34 
Смежные вопросы