SQL select返回定义的行数

SQL select返回定义的行数,sql,sql-server,select,rows,Sql,Sql Server,Select,Rows,我想要得到一个14行的查询结果,即使这个表只有6条记录可用 例如,表只有6条记录,所以我想进行一次选择,然后输出抛出6条记录和8个空行 像这样: |trackings | --------------- |track1 | |track2 | |track3 | |track4 | |track5 | |track6 | | *blank* | | *blank* | | *blank* | |

我想要得到一个14行的查询结果,即使这个表只有6条记录可用

例如,表只有6条记录,所以我想进行一次选择,然后输出抛出6条记录和8个空行

像这样:

|trackings    |
---------------
|track1       |
|track2       |
|track3       |
|track4       |
|track5       |
|track6       |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |
|   *blank*   |
我在谷歌上搜索如何实现这一点,但我找不到最好的标签来找到它,我读了一些例子与工会,但在这种情况下是超过1个空白或自定义行

请注意,表中的记录可能会更改,但我只需要14行。这些行可以是包含数据的14行,也可以是空白行,具体取决于具体情况


谢谢,对不起我的英语

如果不关心行是否为空,则可以生成行。以下是使用外部应用的方法:


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

如果您不关心行是否为空,则可以生成行。以下是使用外部应用的方法:


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

我添加了otherField1和otherField2只是为了做一个一般性的回答 此结果集始终有14条记录,如果表中的记录少于该数字,则最晚的记录将填充为null

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

我添加了otherField1和otherField2只是为了做一个一般性的回答 此结果集始终有14条记录,如果表中的记录少于该数字,则最晚的记录将填充为null

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。

您最好在应用程序层中实现这一点,但是,如果您想在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。

我很好奇为什么要填充结果集。这样做背后的商业目的是什么?阅读本文,我需要做一个特定的报告,这样在布局中只适合14行,因此,如果我得到的数据行没有空白,页脚就会向上移动,并且想法是打印所有14行。@路易斯,我的经验是,这应该是报表设计器而不是数据源的责任。我只是想提一下。如果你无法控制报表设计,我完全理解,但如果你控制了,那么你真的应该在报表方面这样做。@相信我,我认为使用递归CTE生成一个包含14行的理货表有点太过复杂了。我真的很好奇为什么要填充结果集。这样做背后的商业目的是什么?阅读本文,我需要做一个特定的报告,这样在布局中只适合14行,因此,如果我得到的数据行没有空白,页脚就会向上移动,并且想法是打印所有14行。@路易斯,我的经验是,这应该是报表设计器而不是数据源的责任。我只是想提一下。如果你无法控制报表设计,我完全理解,但如果你控制了,那么你真的应该在报表方面这样做。@相信我,我认为使用递归CTE生成一个包含14行的理货表有点过分了!这个查询很有魅力,我不是设计报表的人,也许我会在报表设计器上搜索如何实现这一点,但这里我只是做一些查询;。谢谢大家!哇,老兄!这个查询很有魅力,我不是设计报表的人,也许我会在报表设计器上搜索如何实现这一点,但这里我只是做一些查询;。谢谢大家!