关于sql语句怎么写两张表的关联并分组汇总
比如有两张表,一张表是销售(货号、销售额),一张表是进货(货号、进价)其中两张表的“货号”均不是主键。如果两张表关联的话,记录数就是:销售记录数×进货记录数。再汇总数据就...
比如有两张表,一张表是销售(货号、销售额),一张表是进货(货号、进价)
其中两张表的“货号”均不是主键。
如果两张表关联的话,记录数就是:销售记录数×进货记录数。再汇总数据就不准了。
我以前想要两张表关联并汇总的做法是把其中一张表(销售表)货号汇总然后插入临时表里面,这张临时表的货号就是主键,然后再关联进货表,再汇总。
能否不建临时表,直接可以写sql 关联汇总。
楼下两个回答的不知道说些什么。听不懂还是不会就乱回答。
销售表:sales
gdno qty
01 10
01 5
进货表:order
01 15
01 12
select sales.gdno,
sum(sales.qty),
sum(order.qty)
from sales,order
where sales.gdno = order.gdno
group by sales.gdno
得出的结果是:
01 10 15
01 10 12 -----》 汇总:01 30 54
01 5 15
01 5 12
而我要的结果是:
01 15 27
下面的语句,pb + syabese 上通不过的。否则我也不问了。 展开
其中两张表的“货号”均不是主键。
如果两张表关联的话,记录数就是:销售记录数×进货记录数。再汇总数据就不准了。
我以前想要两张表关联并汇总的做法是把其中一张表(销售表)货号汇总然后插入临时表里面,这张临时表的货号就是主键,然后再关联进货表,再汇总。
能否不建临时表,直接可以写sql 关联汇总。
楼下两个回答的不知道说些什么。听不懂还是不会就乱回答。
销售表:sales
gdno qty
01 10
01 5
进货表:order
01 15
01 12
select sales.gdno,
sum(sales.qty),
sum(order.qty)
from sales,order
where sales.gdno = order.gdno
group by sales.gdno
得出的结果是:
01 10 15
01 10 12 -----》 汇总:01 30 54
01 5 15
01 5 12
而我要的结果是:
01 15 27
下面的语句,pb + syabese 上通不过的。否则我也不问了。 展开
4个回答
展开全部
这实际上是列更换及分组汇总的问题:
请注意,进货表名用“order”会产生关键字冲突,下面代码用方括号[order]以区别于排序用关键字order,至于syabese对有关键字冲突的表名是否也是用方括号,请参阅联机说明。一般来说,不同的数据库都是采用方括号防止关键字冲突。下面代码在ACCESS和SQLSERVER均检验通过,相信syabese也没问题。为了避免冲突可以为进货表改名。
select t.gdno,sum(t.qty_sales) as sum_qty_sales,sum(t.qty_order)
as sum_qty_order from (select gdno,qty as qty_sales,0 as qty_order
from sales union all select gdno,0 as qty_sales,qty as qty_order
from [order])t group by t.gdno
试一试效果吧!注意用两表连接的办法,在两张表的gdno不能全部一一对应时可能会丢失部分数据,所以为了保证所有情况下都计算准确,我采用了UNION ALL 运算符。
请注意,进货表名用“order”会产生关键字冲突,下面代码用方括号[order]以区别于排序用关键字order,至于syabese对有关键字冲突的表名是否也是用方括号,请参阅联机说明。一般来说,不同的数据库都是采用方括号防止关键字冲突。下面代码在ACCESS和SQLSERVER均检验通过,相信syabese也没问题。为了避免冲突可以为进货表改名。
select t.gdno,sum(t.qty_sales) as sum_qty_sales,sum(t.qty_order)
as sum_qty_order from (select gdno,qty as qty_sales,0 as qty_order
from sales union all select gdno,0 as qty_sales,qty as qty_order
from [order])t group by t.gdno
试一试效果吧!注意用两表连接的办法,在两张表的gdno不能全部一一对应时可能会丢失部分数据,所以为了保证所有情况下都计算准确,我采用了UNION ALL 运算符。
展开全部
select s.gdno, s.qty as s_qty, o.qty as o_qty
from
(select gdno, SUM(qty) as qty from sales group by gdno) s
right join (select gdno, SUM(qty) as qty from [order] group by gdno) o on s.gdno = o.gdno
from
(select gdno, SUM(qty) as qty from sales group by gdno) s
right join (select gdno, SUM(qty) as qty from [order] group by gdno) o on s.gdno = o.gdno
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select sales.gdno,
sum(sales.qty)/count(sales),
sum(order.qty)/count(order)
from sales,order
where sales.gdno = order.gdno
group by sales.gdno
sum(sales.qty)/count(sales),
sum(order.qty)/count(order)
from sales,order
where sales.gdno = order.gdno
group by sales.gdno
更多追问追答
追问
你写错了,没用
追答
说真的,我没有明白你现在的意思
销售记录数×进货记录数为什么?通常的销售和进货的关系都是+或-啊
临时表的结构又是什么样的?
你要的总汇是什么?是所有价格总和吗?
还有,为什么不用:
select a.gdno,sum(a.qty),sum(b.qty) from sales a,order b where a.gdno=b.gdno group by a.gdno
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不明白,既然你货号不是主键,当你汇总的时候你怎么删除啊,你这问题有点奇怪哦。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |