SQL语句查询条数不足10行时如何自动补充空行

mac2025-06-01  33

在用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查询。

最新回复(0)