SQL select返回定义的行数
我想要得到一个14行的查询结果,即使这个表只有6条记录可用 例如,表只有6条记录,所以我想进行一次选择,然后输出抛出6条记录和8个空行 像这样: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* | |
|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行的理货表有点过分了!这个查询很有魅力,我不是设计报表的人,也许我会在报表设计器上搜索如何实现这一点,但这里我只是做一些查询;。谢谢大家!哇,老兄!这个查询很有魅力,我不是设计报表的人,也许我会在报表设计器上搜索如何实现这一点,但这里我只是做一些查询;。谢谢大家!