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
  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)) >= 10 THEN
          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 BETWEEN 17721 AND 17750      

2)查询结果
在这里插入图片描述
3)补充行SQL查询

SELECT ORG_ID || '', ITEM_ID || '', UOM_CODE
  FROM MTL_ITEMS
 WHERE ITEM_ID BETWEEN 17721 AND 17750

UNION ALL
SELECT '', '', ''
  FROM DUAL
 WHERE (CASE
         WHEN (SELECT COUNT(1)
                 FROM MTL_ITEMS
                WHERE ITEM_ID BETWEEN 17721 AND 17750) >= 10 THEN
          2
         ELSE
          1
       END) = 1
CONNECT BY LEVEL <
           (10 - (SELECT COUNT(1)
                    FROM MTL_ITEMS
                   WHERE ITEM_ID BETWEEN 17721 AND 17750))

4)查询结果
在这里插入图片描述
可以看到,当查询数据不足十条时,该SQL可以补充空行,使结果显示十条;而当查询数据大于等于十条时,显示结果与普通SQL一致。
该sql如果在JAVA端进行拼接的话,可以先查询出普通sql语句能够返回的数据条数,然后再嵌入后面另个子查询中去,相对而言会比较直观,大概数据小于10行时,还可以减少一次sql查询。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章