新开一贴,之前的交代的不够明确。
SQL学的效果一直不是很理想,对于联立、合并等基本操作还是一头雾水。
上面的图片给定的是,最左侧是主数据库,其中过滤出来的ID,作为在后续表中查找的关键,后续更多的表中的ID是不全的,对后续的表格逐个进行查找、联立,如果在规定的条件下,无数据的话,就补零,有数据的话,就补数据,形成最终的输出效果。
目前是四张表的查找和联立,假如表格超过10张以上,如何做到代码简洁、运行高效?
谢谢!
新开一贴,之前的交代的不够明确。
SQL学的效果一直不是很理想,对于联立、合并等基本操作还是一头雾水。
上面的图片给定的是,最左侧是主数据库,其中过滤出来的ID,作为在后续表中查找的关键,后续更多的表中的ID是不全的,对后续的表格逐个进行查找、联立,如果在规定的条件下,无数据的话,就补零,有数据的话,就补数据,形成最终的输出效果。
目前是四张表的查找和联立,假如表格超过10张以上,如何做到代码简洁、运行高效?
谢谢!
这种表之间结合的数据,只能关联去查询,如果有多张表的话,就只能铜鼓哦多次关联获取结果了
select t1.ID, t1.FL as '分类', t1.`总计`, t2.`领导`, t3.`税务`, t3.`杂项`, t4.`外卖+堂食`, t4.`其他`
from(
-- 关联子查询X1
select FL, ID, IFNULL(sum(DATA1), 0) as '总计'
from X1 where KJ = '总计' and FL in ('合肥', '芜湖') group by FL,ID
)t1
left join(
-- 关联子查询X2
select ID, IFNULL(sum(DATA1), 0) as '领导'
from X2 where KJ = '领导' group by ID
)t2 on t1.ID = t2.ID
left join(
-- 关联子查询X3
select tt3.ID, IFNULL(tt3.`税务`, 0) as '税务', IFNULL(tt3.`杂项`, 0) as '杂项' from(
select ID, case KJ when '税务' then sum(DATA1) end '税务', case KJ when '杂项' then sum(DATA1) end '杂项'
from X3 where KJ in ('税务', '杂项') group by ID, KJ
)tt3
)t3 on t1.ID = t3.ID
left join(
-- 关联子查询X4
select tt4.ID, IFNULL(tt4.`外卖+堂食`, 0) as '外卖+堂食', IFNULL(tt4.`其他`, 0) as '其他' from(
select ID, case KJ when '堂食' or '外卖' then sum(DATA1) end '外卖+堂食', case KJ when '其他' then sum(DATA1) end '外卖'
from X4 where KJ in ('堂食', '外卖', '其他') group by ID, KJ
)tt4
)t4 on t1.ID = t4.ID