17,082
社区成员
发帖
与我相关
我的任务
分享
---- 测试数据
WITH tmp AS
(
SELECT 1 ID, 21000 TOTAL_VALUES , 10000 MAX_VALUES FROM dual UNION ALL
SELECT 2 ID, 20000 TOTAL_VALUES , 10000 MAX_VALUES FROM dual UNION ALL
SELECT 3 ID, 5000 TOTAL_VALUES , 10000 MAX_VALUES FROM dual
)
---- 查询SQL
SELECT ID,"VALUES"
FROM (
-- 抽取一 整除的部分(21000 = 10000,10000) 剩余 1000 留在抽取二 中查询 + 合并
SELECT DISTINCT ID
, CASE WHEN MAX_VALUES > TOTAL_VALUES
THEN TOTAL_VALUES
ELSE MAX_VALUES END "VALUES"
, LEVEL
FROM tmp
WHERE TOTAL_VALUES > MAX_VALUES
CONNECT BY LEVEL <= trunc(TOTAL_VALUES / MAX_VALUES)
UNION ALL
-- 抽取二 不能整除的部分(21000 = 1000)、以及 不足额(5000 < 分隔标准 10000)
SELECT ID
, MOD(TOTAL_VALUES , MAX_VALUES) "VALUES"
,-9
FROM tmp
WHERE MOD(TOTAL_VALUES , MAX_VALUES) > 0 -- 不能整除的部分(取余)
OR MAX_VALUES > TOTAL_VALUES -- 不足额的部分
)
ORDER BY 1,2;