SQL select返回已定义的行数

时间:2016-03-10 22:39:35

标签: sql sql-server select rows

即使表只有6条可用记录,我也希望获得14行查询结果。

例如,表只有6条记录,所以我想做一个SELECT,输出把6个记录中的8个空行抛给我。

像这样:

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

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

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

谢谢,对不起我的英文!

3 个答案:

答案 0 :(得分:2)

如果您不在乎行是否为空,则可以生成行。以下是使用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;

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

答案 1 :(得分:2)

我添加了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

答案 2 :(得分:0)

您可能最好在应用程序层中实现此功能,但是,如果要在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次。