即使表只有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行或其中一些是空白的。
谢谢,对不起我的英文!
答案 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次。