设为首页 加入收藏

TOP

SQL编程实例:Access数据库,两张表的统计,count、sum聚合函数的使用,iif的使用,groupby的使用
2014-11-23 23:37:18 来源: 作者: 【 】 浏览:10
Tags:SQL 编程 实例 Access 数据库 张表的 统计 count sum 聚合 函数 使用 iif groupby

使用工具:

FineReport报表设计器,Access数据库

需求描述:

有两张表,订单表和订单明细表

1、订单表结构:

\

2、订单明细表结构:

\

目的:根据这两张表做出下面的一张表

\

分析:

1、因为在订单明细里订单ID可能出现多次,所以一定要先把订单ID去重,否则两张表join的时候,订单ID就会有重复的,这时用count函数求订单数量时就会出错了

所以先将订单明细表按订单ID进行分组:

(select 订单ID,sum(数量*单价*(1-折扣)) as 订单销量 from 订单明细 group by 订单ID)
然后再两张表join:
select 单子.订单ID,订购年份,订购月份,订单销量,是否已付 from

(SELECT 订单ID,year("订购日期") as 订购年份,month("订购日期") as 订购月份,是否已付 from 订单) as 单子,
(select 订单ID,sum(数量*单价*(1-折扣)) as 订单销量 from 订单明细 group by 订单ID) as 详情 

where 单子.订单ID=详情.订单ID
2、接下来就是需要对以上求出的这张”总表“进行按年份和月份分组,count(订单ID)求订单数量,sum聚合函数进行带有条件的求和来求已付订单数量等。

解答:

select 订购年份,订购月份,count(订单ID) as 订单数量,sum(订单销量*iif(是否已付=1,1,0)) as 已付订单数量,sum(订单销量) as 销量 from

(select 单子.订单ID,订购年份,订购月份,订单销量,是否已付 from

(SELECT 订单ID,year("订购日期") as 订购年份,month("订购日期") as 订购月份,是否已付 from 订单) as 单子,
(select 订单ID,sum(数量*单价*(1-折扣)) as 订单销量 from 订单明细 group by 订单ID) as 详情 

where 单子.订单ID=详情.订单ID
) 
where 订购年份 =${year}
group by 订购年份,订购月份
部分解释:

1、year,month是帆软设计器自带函数,例如,year函数作用是将2014-5-3取得年份2014

2、iif(是否已付=1,1,0)是Access数据库条件判断,作用是,如果是否已付=1,则返回1,否则返回0

3、${year}是传过来的参数

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇PostgreSQL遍历表的PLSQL列举 下一篇PLSQL Developer习惯设置

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: