17,086
社区成员
发帖
与我相关
我的任务
分享
select m.*,a.rn ,a.level_standard,a.asstattr_id from test_master m,
(select rownum rn ,a.material_id,a.asstattr_id,level_standard, substr(a.level_standard,1,instr(a.level_standard,'-')-1) minlevel,substr(a.level_standard,instr(a.level_standard,'-') + 1) maxlevel from test_asstattr a) a
where m.material_id = a.material_id
and m.lop between a.minlevel and a.maxlevel
WITH TMP AS
(SELECT MATERIAL_ID, ASSTATTR_ID, LEVEL_STANDARD,
REGEXP_SUBSTR(LEVEL_STANDARD, '[^-]+', 1, 1) AS S,
REGEXP_SUBSTR(LEVEL_STANDARD, '[^-]+', 1, 2) AS E
FROM TEST_ASSTATTR)
SELECT T.MATERIAL_ID, T.MATERIAL_NAME, T.MATERIAL_MODEL, SUM(T.QTY),
T.MATERIAL_UNIT, T1.LEVEL_STANDARD AS LOP, T2.LEVEL_STANDARD AS VF,
T3.LEVEL_STANDARD AS WLD
FROM TEST_MASTER T
LEFT JOIN TMP T1 -- lop
ON T1.MATERIAL_ID = T.MATERIAL_ID
AND T1.ASSTATTR_ID = 'lop'
AND T.LOP BETWEEN T1.S AND T1.E
LEFT JOIN TMP T2 -- vf
ON T2.MATERIAL_ID = T.MATERIAL_ID
AND T2.ASSTATTR_ID = 'vf'
AND T.VF BETWEEN T2.S AND T2.E
LEFT JOIN TMP T3 -- wld
ON T3.MATERIAL_ID = T.MATERIAL_ID
AND T3.ASSTATTR_ID = 'wld'
AND T.WLD BETWEEN T3.S AND T3.E
GROUP BY T.MATERIAL_ID, T.MATERIAL_NAME, T.MATERIAL_MODEL, T.MATERIAL_UNIT,
T1.LEVEL_STANDARD, T2.LEVEL_STANDARD, T3.LEVEL_STANDARD
ORDER BY T.MATERIAL_ID, T1.LEVEL_STANDARD, T2.LEVEL_STANDARD, T3.LEVEL_STANDARD