日产量表
一个内机对应一个外机 一个外机对应多个内机
id 机型 产量 类型 关系(指向外机)
1 kn1 100 内机 12
2 kn2 200 内机 12
3 kn3 700 内机 12
4 kn4 200 内机 12
5 kn5 200 内机 14
6 kn6 200 内机 14
7 kn7 500 内机 13
8 kn8 200 内机 14
9 kn9 200 内机 15
10 kn10 4000 内机 15
11 kn11 200 内机 15
12 kw1 400 外机 0
13 kw2 800 外机 0
14 kw3 900 外机 0
15 kw4 200 外机 0
"
查询SQL怎么写
我想实现这个功能.
一个内机对应一个外机 一个外机对应多个内机
机型 产量 类型 配套
kn1 100 内机 100
kn2 200 内机 200
kn3 700 内机 100
kn4 200 内机 0
kn5 200 内机 200
kn6 200 内机 200
kn7 500 内机 500
kn8 200 内机 200
kn9 200 内机 200
kn10 4000 内机 0
kn11 200 内机 0
kw1 400 外机 0
kw2 800 外机 0
kw3 900 外机 0
kw4 200 外机 0
"配套算法:
内1 配套量 外>=内1?内1:外
内2 配套量 外-内1>=内2?内2:外-内1
内3 配套量 外-内1-内2>=内3?内3:外-内1-内2 "
with t1 as(
select 1 id,'kn1' 机型,100 产量,'内机' 类型,12 关系 from dual
union all
select 2,'kn2',200,'内机',12 from dual
union all
select 3,'kn3',700,'内机',12 from dual
union all
select 4,'kn4',200,'内机',12 from dual
union all
select 5,'kn5',200,'内机',14 from dual
union all
select 6,'kn6',200,'内机',14 from dual
union all
select 7,'kn7',500,'内机',13 from dual
union all
select 8,'kn8',200,'内机',14 from dual
union all
select 9,'kn9',200,'内机',15 from dual
union all
select 10,'kn10',4000,'内机',15 from dual
union all
select 11,'kn11',200,'内机',15 from dual
union all
select 12,'kw1',400,'外机',0 from dual
union all
select 13,'kw2',800,'外机',0 from dual
union all
select 14,'kw3',900,'外机',0 from dual
union all
select 15,'kw4',200,'外机',0 from dual
),
t2 as(
select t1.*,(case 关系 when 0 then 0 else sum(产量) over (partition by 关系 order by id) end) diff from t1
)
select t2.机型,t2.产量,t2.类型,
(case when t1.产量 is null then 0
when t1.产量>=t2.diff then t2.产量
else (case when t1.产量-t2.diff+t2.产量>0 then t1.产量-t2.diff+t2.产量 else 0 end) end) 配套
from t2 left join t1 on t2.关系=t1.id
order by t2.id;
/*
机型 产量 类型 配套
---- ---------------------- ------ ----------------------
kn1 100 内机 100
kn2 200 内机 200
kn3 700 内机 100
kn4 200 内机 0
kn5 200 内机 200
kn6 200 内机 200
kn7 500 内机 500
kn8 200 内机 200
kn9 200 内机 200
kn10 4000 内机 0
kn11 200 内机 0
kw1 400 外机 0
kw2 800 外机 0
kw3 900 外机 0
kw4 200 外机 0
*/