急:一个SQL语句
假设有以下两个表:
create table #sl_1(KindCode varchar(10),KindCodeName varchar(10),Total money)
insert #sl_1 values( '001 ', '工业 ',100)
insert #sl_1 values( '008 ', '商业 ',20)
insert #sl_1 values( '009 ', '生活 ',30)
create table #sl_2(KindCode varchar(10),KindCodeName varchar(10),Total int)
insert #sl_2 values( '001 ', '工业 ',-10)
insert #sl_2 values( '008 ', '商业 ',-50)
___________________________________________
我想要的结果如下 :
要求:语句越简练越好 执行速度越快越好,因为我要用这个语句检索很多数据,语句中不要带 in 或者not in 或者 exists关键字
KindCode KindCodeName Total
001 工业 90 (注释:100+(-10)=90)
008 商业 -30
009 生活 30
------解决方案-------------------- select tb.KindCode,tb.KindCodeName,sum(Total) as Total
from
(select KindCode,KindCodeName,Total from #sl_1
union all
select KindCode,KindCodeName,Total from #sl_2
) tb
group by tb.KindCode,tb.KindCodeName
------解决方案--------------------select KindCode,KindCodeName,Total=sum(Total)
from
(
select * from #sl_1
union all
select * from #sl_2
)as tmp group by KindCode,KindCodeName
------解决方案--------------------以上两种都是正确的。
如果两个表里的数据不存在重复:
select KindCode,KindCodeName,Total=t.Total+v.Total
from #sl_1 t left join #sl_2 v on t.KindCode=v.KindCode
纯属蹭分.
------解决方案--------------------select KindCode=isnull(a.KindCode,b.KindCode),KindCodeName=isnull(a.KindCodeName,b.KindCodeName),
Total=isnull(a.Total,0)+isnull(b.Total,0) from #sl_1 a full outer join #sl_2 b
on a.KindCode=b.KindCode
------解决方案--------------------上面的只满足KindCode不重复的情况