SQL多表联合汇总,并对相同字段值求和,

例如,我有3个结构相同的数据表:
tableA:
TID TNAME TNUM
1 AA 10
2 BB 20
3 CC 30

tableB
TID TNAME TNUM
1 AA 40
2 BB 50
4 DD 60

tableC:
类似,每个表里面有相同值的Name和不同的Name,现查询要得到结果按Name汇总:ID NAME NUMBER
1 AA 50
2 BB 70
3 CC 30
4 DD 60
请举例3个表的查询语句;
如果tableA+tableB-tableC呢,怎么实现?如果tableA和tableB中都没有C中TName,则查询结果记为负值。

工作需要,正在研究做一个多个仓库管理系统,C# WinForm,这个问题把我困扰了两天,查询结果不如人意,谢谢各位大虾。帐户没多少分。

是否可以理解为A表+B表中的内容减去C表中NAME相同的,并且加上C表中A表和B表都没有的?可以这样做
create Table #TableA(ID int,NAME varchar(5),TNUM int)
create Table #TableB(ID int,NAME varchar(5),TNUM int)
create Table #TableC(ID int,NAME varchar(5),TNUM int)

insert into #TableA values (1,'AA',10),(2,'BB',20),(3,'CC',30)
insert into #TableB values (1,'AA',40),(2,'BB',50),(4,'DD',60)
insert into #TableC values (1,'AA',50),(2,'BB',70),(3,'CC',30),(5,'EE',80)

select * into #Temp from #TableA union all select * from #TableB

merge #Temp t1 using #TableC t2
on t1.NAME = t2.NAME
when matched then
delete
when not matched then
insert values (t2.ID,t2.NAME,-t2.TNUM);

select * from #temp
#temp中的内容最终为:
ID NAME TNUM
----------- ----- -----------
5 EE -80
4 DD 60
其中AA,BB,CC在C表中出现,即被筛除,保留DD。
EE未出现在A,B表中,结果记为负值。
可以写一个存储过程,把#temp的内容返回即可。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-23
我学的是sql server,不懂你问的是这个数据库么?
select tableA.TID as ID,tableA.TNAME as NAME,tableA.TNUM+tableB.TNUM as NUMBER into tableC from tableA inner join tableB on tableA.TID=tableB.TID

能帮你的只有这些了
至于453655422说的count不能用,是用于统计个数的,同样SUM也不能用,SUM虽然是求和函数,但是是求记录的总和,还有就是只要是Transact-SQL语句在各种数据库都是通用的,所以group by 和 count 在sql server中和mysql一样用法本回答被网友采纳
第2个回答  2012-05-14
提示一下,group by 和 count ,这个事mysql中的,不知道sql server 中的是什么样子
第3个回答  2015-10-18
可以啊,直接sum就好了

用sql语句进行多表连接查询出现重复数据
1、在电脑上打开要去掉重复数据的数据库,这里新建一张含有重复数据的user表。2、输入“select * from user where name in (select name from user group by name having count(name) > 1) ”sql语句,点击运行可以看到查询出了数据库中user表的重复数据。3、通过“delete from user where name...

sql合并重复数据并求和
select a,sum(b) as 记录数,max(c) as c from 表名 group by a;--- 以上,希望对你有所帮助。

如何利用SQL语句将多个工作表中具有相同属性的数据汇总起来
将多个表中的数据汇总最常用的办法是使用union all,具体的要视表结构、“相同属性”的具体定义、汇总方式等因素而定,可能还要用到连接、筛选、子查询、分组等手段,当然聚合函数sum是少不了的。下面例子实现将t1,t2,t3中的各个产品汇总起来,显示每种产品的总量:select t.product ,sum(t.qty) fr...

sql语句,合并多条记录中的相同字段。
假如你的表结构如下:create table tb_test (商店id int,时间id int,用户id int,购买产品id int )可以创建如下聚合函数:create function fn_test(@商店id int,@时间id int,@用户id int)returns varchar(8000)as begin declare @ret varchar(8000)set @ret=''select @ret=@ret+convert(varchar(...

求问:sql中多表关联查询求和,主表的数据根据副表的数据重复相加了,等 ...
首先,我怀疑你or没用明白,该括号括起来的地方没括起来。然后,你可以先把a表和d表分别汇总,然后再关联起来。select sum(d.go),sum(a.letter1),a.region_id1,d.region_idfrom(select region_id1,platform_id1,time1,sum(a.letter1) letter1 from dwds where `time1` BETWEEN 1535040000 ...

SQL如何在多张表中将同一列数据整合查询并剔重?
假设 A 有 ID 1,2,3,4 B 有 ID 2,3,4,5 C 有 ID 3,4,5,6 D 有 ID 3,4,5,7 假如要的结果是 1,2,3,4,5,6,7 的话,简单:SELECT ID FROM A UNION SELECT ID FROM B UNION SELECT ID FROM C UNION SELECT ID FROM D ...

SQL语句:多表查询并计算再求和
try this one SELECT SUM(t1.totalTime* b.时薪)FROM (SELECT 人员ID, SUM(工作时间编号) AS totalTime FROM A GROUP BY 人员ID) t1, B WHERE t1.人员ID = B.人员ID

SQL中,如何将三个表中同一字段中的内容汇总到一个字段中?
集合查询,字段的数据类型要一致。并操作是将结果竖着合并。select 字段 from A UNION ALL select 字段 from B UNION ALL select 字段 from C 当然查询还可以是多个字段,还可加WHERE条件。加ALL是把重复的字段也留下,不想重复就去掉ALL。

sql 实现多个表格中查询相同的数值
以下语句可以把重名的都找出来, 不过返回值只有一个姓名 select 姓名 from(select 姓名, 年龄 from 表1 union all select 姓名, 年龄 from 表2 union all select 姓名, 年龄 from 表3 ) a group by 姓名 having count(*)>1

SQL多个关联表求和语句
sum(a.合同数量) as 该项目总的合同数量,sum(b.完成数量) as 该项目总的完成数量 from tb2 a,tb3 b where a.项目ID=b.项目ID and a.客户ID='A0001'group by a.客户ID,a.项目ID 如果还要包含其他字段:代码如下:select c.客户ID,c.项目ID,c.该项目总的合同数量,c.该项目总的完成...

相似回答