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查詢。

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