Foxtable(狐表)用户栏目专家坐堂 → SQL语句的写法


  共有2490人关注过本帖树形打印复制链接

主题:SQL语句的写法

帅哥哟,离线,有人找我吗?
ap9709130
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1470 积分:11456 威望:0 精华:0 注册:2013/11/24 22:10:00
SQL语句的写法  发帖心情 Post By:2017/6/4 23:39:00 [只看该作者]

有一个统计的SQL语句写法,今晚一直都写不对,请各位老师教一下:

我有一个订单明细表, 上面有产品数量,客户名称,和 产品名称,还有 订单日期p我现在想统计出每个不同的客户购买 一个产品的前年的总数,去年的总数,和今年的总数?要怎么写

se lec t 客户名称,(se le ct Sum(产品数量) fro m {订单明细表} where 时间段 and 产品名称 = ‘A’) as 前年销售数量,(se le ct Sum(产品数量) fro m {订单明细表} where 时间段 and 产品名称 = ‘A’) as 去年销售数量,
(se le ct Sum(产品数量) fro m {订单明细表} where 时间段 and 产品名称 = ‘A’) as 今年销售数量 from {订单明细表} where 产品名称 = ‘A’ Group by 客户名称 order by 今年销售数量 DESC

但出来的结果,每个客户前年销售数量,今年销售数量,今年销售数量都是一样的,就是这个产品在那个时间段的总数。怎么才能实现我要的功能?

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/5 9:12:00 [只看该作者]

 子查询里面,要加上条件

 

 

Select 客户名称,(select Sum(产品数量) from {订单明细表} b where 时间段 And 产品名称 = 'A' and b.客户名称 = a.客户名称) As 前年销售数量 from {订单明细表} a where 产品名称 = 'A' Group by 客户名称
[此贴子已经被作者于2017/6/5 14:16:18编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1470 积分:11456 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/6/5 10:41:00 [只看该作者]

老师,如果我要把其中的一个表指定为:a ,但是这个是多表通过 INNER JOIN 或者 LEFT JOIN 连接的,要怎么写:

s e l ect {客户资料表}.客户名称 from ((({销售订单明细} INNER JOIN {销售订单主表} ON {销售订单明细}.订单编号 = {销售订单主表}._Identify) INNER JOIN {库存明细表1} ON {销售订单明细}.库存入库编号 = {库存明细表1}._Identify) INNER JOIN {物料信息表} ON {库存明细表1}.MID = {物料信息表}._Identify) INNER JOIN {客户资料表} ON {销售订单主表}.CID = {客户资料表}._Identify where " & Filter & " GROUP BY {客户资料表}.客户名称 ORDER BY 今年年销售数量 DESC"

我想把上面这个指定为 a 

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/5 10:55:00 [只看该作者]

 把整个表整体指定为a不就好了。

 

 具体问题还是做例子上来测试。


 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1470 积分:11456 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/6/5 12:27:00 [只看该作者]

老师

我的数据库存表之间的关系就是这样:
from ((({销售订单明细} INNER JOIN {销售订单主表} ON {销售订单明细}.订单编号 = {销售订单主表}._Identify) INNER JOIN {库存明细表1} ON {销售订单明细}.库存入库编号 = {库存明细表1}._Identify) INNER JOIN {物料信息表} ON {库存明细表1}.MID = {物料信息表}._Identify) INNER JOIN {客户资料表} ON {销售订单主表}.CID = {客户资料表}._Identify

我现在想按客户购买产品生成一个统计表,有4列  客户名称,前年销售总量,去年销售总量,今天销售总量。试了好久都不能成功,能帮忙指点一下吗?



 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/5 14:16:00 [只看该作者]

 如果是这样的话,建议先做一个视图,不然sql语句会变得太长。

 

 把你5楼的sql语句做成视图,命名为 销售订单信息表,然后写sql语句

 

Select 客户名称,(select Sum(产品数量) from {销售订单信息表} as b where 时间段 And 产品名称 = 'A' and b.客户名称 = a.客户名称) As 前年销售数量 from {销售订单信息表} as a where 产品名称 = 'A' Group by 客户名称


 回到顶部