我正在用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
)
答案 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;