加入时选择数字范围

时间:2014-10-07 13:38:09

标签: sql common-table-expression

我正在用CTE选择一系列数字1-6。我有另一个有两列的表。一个在1-6之间的任何数字和一个名为code的列。

我想总是返回1-6但是加入我的另一张包含代码的表。

一个例子是:

Table 1
Number
------
1
2
3
4
5
6


Table 2
   Number | Code
   ------   -----
    1         B
    3         A
    5         C

我希望Select返回:

CodeNumber | Code
------       -----
1             B
2            NULL
3             A
4            NULL
5             C
6            NULL

如果我加入号码,则不会返回所有值。

DECLARE @Start INT 
DECLARE @End INT
DECLARE @Priority CHAR(2)
SELECT  @Start = -3
      , @End = 3
      , @Code = ''

WITH    Numbers (Number, Code)
          AS ( SELECT   @Start AS Number, @Code
               UNION ALL
               SELECT   Number + 1, @Code
               FROM     Numbers
               WHERE    Number < @End
             )

1 个答案:

答案 0 :(得分:1)

使用left join

WITH Numbers(Number) as (
       SELECT   @Start AS Number
       UNION ALL
       SELECT   Number + 1
       FROM     Numbers
       WHERE    Number < @End
      )
select n.number, t.code
from numbers n left join
     table2 t
     on t.number = n.number;