如下图的查出来的结果是有问题的。
select distinct(n.dict) name,nvl(zl.total,0) value from( select m.*,dict.* from sa.SJJK_TAG m left join sa.ST_DICT dict on dict.dictid=m.TAGID where dict.kind ='SJJK_TAG' and dict.parentid ='01') n left join sa.SJJK_SJZL zl on zl.sjzlno =n.sjzlno
select name,sum(value) value from ( select dict.dictid,dict.dict name,value from (select tagid,nvl(sum(total),0) value from sa.sjjk_sjzl a,sa.sjjk_tag b where a.sjzlno =b.sjzlno and b.tagid like '01%' group by tagid) m left outer join sa.st_dict dict on dict.dictid=m.tagid and dict.kind ='SJJK_TAG' union all ( select dictid,dict name ,0 value from sa.st_dict dict where dict.kind ='SJJK_TAG' and dict.parentid ='01' ) ) group by dictid,name order by dictid
上面的sql为正解。把重复的数据先分组去重,再和别的表连接。
以防止完全没数据的情况,用
union all ( select dictid,dict name ,0 value from sa.st_dict dict where dict.kind ='SJJK_TAG' and dict.parentid ='01' )
给没值的字段赋0