日期:2014-05-18  浏览次数:20471 次

急:一个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不重复的情况