SQL语句查询条数不⾜10⾏时如何⾃动补充空⾏
在⽤ireport只做报表时,客户要求显⽰⾄少⼗⾏数据,不⾜⼗⾏时,显⽰空⾏。
ireport的数据源是数据库sql,⼀般情况就是查出来,是多少就显⽰多少。现在这个报表,需要嵌⼊⼦表,如果头表只有⼀条或数据⽐较少时,头⾏之间的空表会⽐较难看,所以要求显⽰空⾏信息。
数据少于10条
1)普通SQL查询
SELECT ITEM_ID ||'' ITEM_ID, ITEM_CODE, DESCRIPTIONS
FROM MTL_ITEMS
WHERE ITEM_ID IN(17721,17239)
2)查询结果
3)补充⾏SQL查询
SELECT ITEM_ID ||'' ITEM_ID, ITEM_CODE, DESCRIPTIONS
sql语句查询不包含FROM MTL_ITEMS
WHERE ITEM_ID IN(17721,17239)
UNION ALL
SELECT'','',''
FROM DUAL
WHERE(CASE
WHEN(SELECT COUNT(1)FROM MTL_ITEMS WHERE ITEM_ID IN(17721,17239))>=10THEN
2
ELSE
1
END)=1
CONNECT BY LEVEL<
(11-
(SELECT COUNT(1)FROM MTL_ITEMS WHERE ITEM_ID IN(17721,17239)))
4)查询结果
数据⼤于10条
1)普通SQL查询
SELECT ORG_ID,ITEM_ID,UOM_CODE FROM MTL_ITEMS WHERE ITEM_ID BETWEEN17721A
ND17750
3)补充⾏SQL查询
SELECT ORG_ID ||'', ITEM_ID ||'', UOM_CODE
FROM MTL_ITEMS
WHERE ITEM_ID BETWEEN17721AND17750
UNION ALL
SELECT'','',''
FROM DUAL
WHERE(CASE
WHEN(SELECT COUNT(1)
FROM MTL_ITEMS
WHERE ITEM_ID BETWEEN17721AND17750)>=10THEN 2
ELSE
1
END)=1
CONNECT BY LEVEL<
(10-(SELECT COUNT(1)
FROM MTL_ITEMS
WHERE ITEM_ID BETWEEN17721AND17750))
可以看到,当查询数据不⾜⼗条时,该SQL可以补充空⾏,使结果显⽰⼗条;⽽当查询数据⼤于等于⼗条时,显⽰结果与普通SQL⼀致。该sql如果在JAVA端进⾏拼接的话,可以先查询出普通sql语句能够返回的数据条数,然后再嵌⼊后⾯另个⼦查询中去,相对⽽⾔会⽐较直
观,⼤概数据⼩于10⾏时,还可以减少⼀次sql查询。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。