确保结果集中的最小行数

时间:2015-02-18 19:54:09

标签: java sql sql-server jdbc

我正在使用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

不确定这是否可行。

2 个答案:

答案 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