我需要我的SQL查询返回15(十五)行。如果它返回少于15行,它需要用空行来完成,如果它返回超过15行,它只显示前15行。有人能帮帮我吗
select * from (select IDCODFATURA,
PAGINA,
TARIFA_RES_TE,
VALOR_ICMS_TE,
TARIFA_COM_ICMS_TE,
TARIFA_SEM_ICMS_TE,
VALOR_PISCOFINS_TE,
VALOR_COM_ICMS_TE,
VALOR_SEM_ICMS_TE,
VALOR_BASE_ICMS,
TARIFA_TUSD,
case
when nvl(param_com_tributos.tipo_imp_imposto_fat,0) = 0 then base_fatura_itens.valor_com_icms
else base_fatura_itens.VALOR_SEM_PCICMS
end as valor,
case
when nvl(param_com_tributos.tipo_imp_imposto_fat,0) = 0 then base_fatura_itens.tarifa_com_icms
else base_fatura_itens.tarifa_res
end as tarifa,
TARIFA_TE,
usuario,
GUID,
TIPO_DESCONTO_MICROGERACAO,
(select VALOR_PIS
from base_fatura_web
where IDCODFATURA = :IDCODFATURA
and PAGINA = :PAGINA
and GUID = :GUID
and usuario = :usuario) as VALOR_PIS,
(select VALOR_COFINS
from base_fatura_web
where IDCODFATURA = :IDCODFATURA
and PAGINA = :PAGINA
and GUID = :GUID
and usuario = :usuario) as VALOR_COFINS
from base_fatura_itens,
param_com_tributos
where IDCODFATURA = :IDCODFATURA
and PAGINA = :PAGINA
and param_com_tributos.idparam=1
and base_fatura_itens.GUID = :GUID
and base_fatura_itens.usuario = :usuario
and base_fatura_itens.descricao <> 'ICMS Descontos tarifários'
order by classificacao,sequencia)
where rownum <=15
2条答案
按热度按时间pvabu6sv1#
正如注解中提到的,使用一个总是提供15行的帮助表。下面的例子是关于emp/dept样本数据的,但是你也应该能够对你的数据集这样做。emp表有14行。
步骤1:生成15个空行
步骤2:向原始查询添加行号。这将用于连接到帮助器表。把顺序改为你需要满足的“前15名”条件。
现在把它们放在一起:
注意第15行是空的,因为emp表中没有匹配的记录。把15改成5,你只会得到5行。
m0rkklqb2#
我做到了!可能Koen Lostrie的答案比我做的更好,但我得到了我公司某个人的帮助,我认为它最符合我们的标准。代码如下: