我正在使用Java和MSSQL,我正在运行一个带有where语句的查询,并希望始终检索至少20个元素,有时查询会检索20条带有数据但有时没有数据的记录,我正在使用top 20,但是当与传递的标准不匹配时,结果集为空。
我需要一种方法来确保结果集中至少有20个元素无关紧要,如果我有20行的null元素。如果查询返回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
不确定这是否可行。
答案 0 :(得分:1)
这应该有效:
SELECT TOP 20 *
FROM (
SELECT Col1, Col2
FROM YourDesiredData
UNION ALL
SELECT TOP 20 NULL, NULL
FROM sys.all_columns
) TMP
答案 1 :(得分:1)
您可以构建一个只包含数字1到20的虚拟表,然后将其连接到该表。
在我的例子中,我将使用CTE来填满我的桌子。
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