选择不存在的行

ana*_*lov 2 sql sql-server sql-server-2005 sql-server-2008 sql-server-2008-r2

假设我有一张桌子:

ColumnA       ColumnB
---------------------------------
1             10.75
4             1234.30
6             2000.99
Run Code Online (Sandbox Code Playgroud)

如何编写将导致以下结果的SELECT查询:

ColumnA    ColumnB
---------------------------------
1             10.75
2             0.00
3             0.00
4             1234.30
5             0.00
6             2000.99
Run Code Online (Sandbox Code Playgroud)

And*_*mar 7

您可以使用CTE创建表中从1到最大值的数字列表:

; with  numbers as
        (
        select  max(ColumnA) as nr
        from    YourTable
        union all
        select  nr - 1
        from    numbers
        where   nr > 1
        )
select  nr.nr as ColumnA
,       yt.ColumnB
from    numbers nr
left join
        YourTable yt
on      nr.nr = yt.ColumnA
order by
        nr.nr
option  (maxrecursion 0)
Run Code Online (Sandbox Code Playgroud)

看到它在SQL Fiddle工作.