2016-03-10 33 views
1

即使表格只有6个可用记录,我也想获得14行查询结果。SQL select返回定义的行数

例如,表格只有6条记录,所以我想做一个SELECT,并且输出将带有8个空白行的6条记录。

像这样:

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

我在谷歌搜索如何实现这一点,但我无法找到最好的标签,找到它,我读了一些例子与UNION但在这种情况下超过1空白或自定义行。

请注意,表中的记录可能会改变,但我只需要14行。这些可以是14行的数据,或者根据情况可以是空白的。

感谢和抱歉我的英语!

+1

我真的很好奇你为什么要打结果集。这样做背后的商业目的是什么? – squillman

+0

阅读本文http://stackoverflow.com/questions/29487482/how-to-add-blank-rows-when-select-query-sql –

+0

我需要做一个特定的报告,所以在布局只适合14行,所以如果我只得到没有空白的数据行,页脚就会移动到顶端,并且想法是打印所有14行。 –

回答

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。

+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; 

您可以使用一个数字表或子查询生成的数字为好。

2

我加入otherField1,otherField2只是做一个通用的答案
此ResultSet,永诺有14条记录,填充空的latests如果有小于表中的这个数字

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