两个Table做合计(200分)

  • 主题发起人 主题发起人 kingsonchan
  • 开始时间 开始时间
K

kingsonchan

Unregistered / Unconfirmed
GUEST, unregistred user!
现有两个Table,表格是一模一样的,只是内容不同,例如:<br>A:<br>f1 &nbsp; &nbsp; &nbsp;f2 &nbsp;(integer)<br>a &nbsp; &nbsp; &nbsp; 1<br>a &nbsp; &nbsp; &nbsp; 2<br>b &nbsp; &nbsp; &nbsp; 1<br><br>B:<br>f1 &nbsp; &nbsp; &nbsp;f2<br>a &nbsp; &nbsp; &nbsp; 3<br>b &nbsp; &nbsp; &nbsp; 1<br>b &nbsp; &nbsp; &nbsp; 5<br><br>现在对这两个表合起来求和,如何一句sql得到这样的结果:<br>f1 &nbsp; &nbsp; sum(f2)<br>a &nbsp; &nbsp; &nbsp; 6<br>b &nbsp; &nbsp; &nbsp; 7<br><br>忘了说条件了。<br>不是两个Table所有的a和b都会计算的,有一定的条件,而且两个Table的条件一定一样的,现在的例子是简化了的情况。<br>我希望尽量简化这句sql,可以的话,条件也写一次就行。<br>如select ......... where f1 in (a,b)
 
你可以分别求和,再2个求和不好吗
 
select f1,sum(f2) qty &nbsp;from (select * from A union all<br>select * from B)<br>group by f1
 
更新了一下问题。
 
select f1, sum(f2) qty<br>&nbsp; from (select f1, f2<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from A<br>&nbsp; &nbsp; &nbsp; &nbsp; union all<br>&nbsp; &nbsp; &nbsp; &nbsp; select f1, f2 <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from B)<br>&nbsp;where f1 in (a, b) -- 条件写在这里<br>&nbsp;group by f1
 
楼上这样union 会不会效率太低?
 
路过...学习..
 
不会啊,用union一样会用到索引。不过把条件写在里面效率会高一点,不过要写二次。
 
union是不是不能用在子查询里啊?这句sql都运行不了:<br>select * &nbsp;from (select * from A union <br>select * from B)<br>更不用说sum(f2),group by 这些了。<br>补充一下,我用的是ms sql.
 
可以用在子查询里面的。不要用union,用union all。另外用的时候最好写字段的名称,不要用*号,如果其中一个表结构改了你的SQL也要改。<br><br>就算是运行不了也有错误的提示,你写出来。要不然就只能是靠猜。
 
SELECT A.FI, SUM(A.F2 + ISNULL(B.F2)) AS F2<br>FROM A LEFT OUTER JOIN B WHERE A.F1 = B.F1 <br>GROUP A.FI
 
看,这是语句和错误。不明白的错误。<br>select f1,f2 &nbsp;from (select f1,f2 from A union all select f1,f2 from B)<br>Line 1: Incorrect syntax near ')'.
 
知道原因了,union后的要结果集要给个名字。<br>select f1,f2 &nbsp;from (select f1,f2 from A union all select f1,f2 from B) C &nbsp;<br>测试了一下,在union里加两个where 和在外面一个where速度比较不明显,不知是数据量少的原因还是什么,起码现在是不影响使用了。
 
多人接受答案了。
 
后退
顶部