确保结果集中的最小行数
Ensure minimum number of rows in a resultset
我正在使用 Java 和 MSSQL,我是 运行 一个带有 where 语句的查询,并且想要始终检索至少 20 个元素,有时是查询检索 20 条有数据但有时没有数据的记录,我使用的是前 20 条记录,但是当与传递的条件不匹配时,结果集为空。
我需要一种方法来确保结果集中至少有 20 个元素,即使我有 20 行包含空元素也没有关系。如果查询 return 10 个元素,我需要在结果集中再插入 10 行。
我希望仅使用 SQL 语句来做到这一点。我有这个,但不符合我的需要
SELECT top 20 null as PROFILETITLE, null as DOCID
union all
SELECT t.pag_id,t.contract_number
from (select 1 as adummy) a
left join (
select pag_id, contract_number from pag_log where pag_id = 11
) t on 1=1
不确定这是否可能。
这应该有效:
SELECT TOP 20 *
FROM (
SELECT Col1, Col2
FROM YourDesiredData
UNION ALL
SELECT TOP 20 NULL, NULL
FROM sys.all_columns
) TMP
您可以构建一个仅包含数字 1 到 20 的虚拟 table,然后左连接到它。
在我的示例中,我将使用 CTE 来填充我的 table。
with justATable(rowNumber)
as
(
select 1
union all
select rowNumber + 1
from justATable where rowNumber < 20
)
select realData.pag_id, realData.contract_number
from justATable
left outer join
(select ROW_NUMBER() OVER (order by contract_number) as RowNumber,
pag_id,
contract_number
from pag_log
where pag_id = 11) realData
on justATable.rowNumber = realData.RowNumber
我正在使用 Java 和 MSSQL,我是 运行 一个带有 where 语句的查询,并且想要始终检索至少 20 个元素,有时是查询检索 20 条有数据但有时没有数据的记录,我使用的是前 20 条记录,但是当与传递的条件不匹配时,结果集为空。
我需要一种方法来确保结果集中至少有 20 个元素,即使我有 20 行包含空元素也没有关系。如果查询 return 10 个元素,我需要在结果集中再插入 10 行。
我希望仅使用 SQL 语句来做到这一点。我有这个,但不符合我的需要
SELECT top 20 null as PROFILETITLE, null as DOCID
union all
SELECT t.pag_id,t.contract_number
from (select 1 as adummy) a
left join (
select pag_id, contract_number from pag_log where pag_id = 11
) t on 1=1
不确定这是否可能。
这应该有效:
SELECT TOP 20 *
FROM (
SELECT Col1, Col2
FROM YourDesiredData
UNION ALL
SELECT TOP 20 NULL, NULL
FROM sys.all_columns
) TMP
您可以构建一个仅包含数字 1 到 20 的虚拟 table,然后左连接到它。
在我的示例中,我将使用 CTE 来填充我的 table。
with justATable(rowNumber)
as
(
select 1
union all
select rowNumber + 1
from justATable where rowNumber < 20
)
select realData.pag_id, realData.contract_number
from justATable
left outer join
(select ROW_NUMBER() OVER (order by contract_number) as RowNumber,
pag_id,
contract_number
from pag_log
where pag_id = 11) realData
on justATable.rowNumber = realData.RowNumber