SQL select 返回定义的行数

SQL select returning a defined number of rows

我想获得 14 行的查询结果,即使 table 只有 6 条记录可用。

例如 table 只有 6 条记录,所以我想创建一个 SELECT,输出结果是 6 条记录和 8 个空白行。

像这样:

|trackings    |
---------------
|track1       |
|track2       |
|track3       |
|track4       |
|track5       |
|track6       |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |

我在 google 上搜索如何实现此目的,但我找不到最好的标签来找到它,我阅读了一些使用 UNION 的示例,但在这种情况下超过 1 个空白或自定义行。

请注意,table 中的记录可能会更改,但我只需要 14 行。这些可以是包含数据的 14 行,也可以是其中一些空白,具体视情况而定。

谢谢,对不起我的英语!

如果您不关心行是否为空,您可以生成行。这是使用 outer apply:

的方法
with t as (
      select t.*, row_number() over (select null) as seqnum
      from t
     )
select t.*
from (values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14)
     ) n(n) left join
     t
     on t.n = n.n;

您也可以使用数字 table 或子查询来生成数字。

我添加了 otherField1、otherField2 只是为了做一个通用的回答
这个结果集,总是有 14 条记录,如果 table

中的记录少于该数字,则最新的记录为空
select top 14 tracking, otherField1, otherField2
from (
    select tracking, otherField1, otherField2, 1 as orderBy from yourTable
    union all select null, null, null, 2
    union all select null, null, null, 2
    union all select null, null, null, 2
    union all select null, null, null, 2
    union all select null, null, null, 2
    union all select null, null, null, 2
    union all select null, null, null, 2
    union all select null, null, null, 2
    union all select null, null, null, 2
    union all select null, null, null, 2  -- this is 14 times here
) as subQuery
order by orderBy, tracking

您最好在您的应用程序层中实现它,但是,如果您想在 SQL 中实现它,您可以使用 CTE 来实现它。第一个 CTE 创建 14 个空记录,在第二个 CTE 中,这些空记录与您的查询结果合并,在最终查询中,选择前 14 个结果,对顶部的非空记录进行排序:

WITH cte
    AS ( SELECT 0 AS Id ,
                ' ' AS EmptyData
        UNION ALL
        SELECT  Id + 1 AS Id ,
                EmptyData
        FROM    cte
        WHERE   Id < 14
       ),
   cte2
    AS ( SELECT 1 AS SortOrder ,
                trackings
        FROM    dbo.data
        UNION ALL
        SELECT  2 AS SortOrder ,
                EmptyData
        FROM    cte
       )
SELECT TOP 14
      trackings
FROM  cte2
ORDER BY SortOrder

这种方法的优点是您可以轻松更改记录总数,只需将两次出现的 14 替换为不同的数字即可。