经典SQL之数据统计

转载 2004年08月02日 14:23:00

有两表:表v记录各id进出的数量(进为正,出为负),表b记录各id的余数。


表v                                                    表b
id    rq                  进出数      ctc           id      rq                  余数     ctc
1     2004-05-10    100          11            1      2004-05-10    100       11
1     2004-05-15    -20           11            1      2004-05-15    80        11
2     2004-05-10    200          11            2      2004-05-10    200       11
2     2004-05-12    50            11            2      2004-05-12    250       11 
2     2004-06-02    -100         11            2      2004-06-02    150       11
3     2004-05-12    50            13            3      2004-05-12     50        13
3     2004-05-20    -10           13            3      2004-05-20     40        13 

现在想统计某一时间段rq1至rq2内不同点ctc各天的进数、出数、余数
比如要得到2004-05-10至2004-05-20之间每一ctc各天的变化结果,如下:
ctc       rq                  进                          出                             余数
                   (进出数正值之和)  (进出数负值之和)    (id对应b表最大日期的余数之和)

11    2004-05-10       300                          0                              300 
11    2004-05-12        50                           0                              350
11    2004-05-15         0                           20                             330
13    2004-05-12        50                           0                              50
13    2004-05-20         0                           10                             40


答案(csdn邹建做答)

--查询参数定义
declare @dt1 datetime,@dt2 datetime
select @dt1='2004-05-12',@dt2='2004-05-20'

--查询语句
select ctc,rq=convert(char(10),rq,120)
 ,进=sum(case when 进出数>0 then 进出数 else 0 end)
 ,出=-sum(case when 进出数<0 then 进出数 else 0 end)
 ,余数=(
  select sum(余数)
  from b join(
   select id,rq=max(rq) from b
   where ctc=v1.ctc and rq <=v1.rq
    and exists(
     select 1 from v
     where ctc=v1.ctc and id=b.id
      and rq <=v1.rq)
   group by id
  )a on a.id=b.id and a.rq=b.rq)
from v v1
where rq between @dt1 and @dt2
group by ctc,rq
order by ctc,rq

常用的数据统计Sql 总结

1. 统计各个条件下的数据 select BatchId,sum(CardSum) 总金额, sum(case when Status=1 then CardSum else 0 end) as 已...
  • yin554393109
  • yin554393109
  • 2016年08月03日 09:56
  • 3532

SQL 查询重复数据并显示重复次数

查询有重复数据的记录 select * from F group by a,b,c,d having count(*)>1 删除重复一模一样的记录,只保留一条记录 select distinct ...
  • delphi308
  • delphi308
  • 2014年03月27日 22:25
  • 49147

数据库专题——SQL语句统计每天、每月、每年的数据

SQL语句统计每天、每月、每年的数据 1、每年 select year(ordertime) 年, sum(Total) 销售合计 from 订单表 group by...
  • zouxiang2188
  • zouxiang2188
  • 2014年08月21日 10:55
  • 7596

SQL对数据进行统计、常用集合函数

学生表:       1、统计记录个数 1)  count(【all】*)【as  列别名】   返回表中的记录数 执行:SELECT COUNT (* )    FROM 学生表 结果为:  ...
  • softcg
  • softcg
  • 2016年12月09日 12:47
  • 3650

SQL Server 统计信息理解(总结)

前言 Sqlserver 查询是基于开销查询的,在首次生成执行计划时,是基于多阶段的分析优化才确定出较好的执行计划。而这些开销的基数估计,是根据统计信息来确定的。统计信息其实就是对表的各个字段的总体数...
  • kk185800961
  • kk185800961
  • 2015年01月17日 17:21
  • 5375

超经典SQL练习题,做完这些你的SQL就过关了

SQL 联系题 使用方法:我用的数据库是 Ms SQL Server 2008 ,练习时应当自己建数据,自己先思考,切勿急躁翻答案!否则效果减半,做完这些,恭喜你,你的 SQL 就算过关了。...
  • flycat296
  • flycat296
  • 2017年03月19日 10:19
  • 3845

Spark 实战,第 3 部分: 使用 Spark SQL 对结构化数据进行统计分析

引言 在很多领域,如电信,金融等,每天都会产生大量的结构化数据,当数据量不断变大,传统的数据存储 (DBMS) 和计算方式 (单机程序) 已经不能满足企业对数据存储,统计分析以及知识挖掘的需要。...
  • u010159842
  • u010159842
  • 2016年12月28日 11:18
  • 1901

SQL成绩统计分析—排名问题

ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()最近写了近半个月的成绩统计服务 , 被SQL折磨半死,下面介绍下在SQL成绩统计分析中遇到的一些小问题,首先介绍下成绩分...
  • u013419838
  • u013419838
  • 2015年07月18日 15:51
  • 6592

[经典面试题]统计数组

【题目】 给定数组A,大小为n,数组元素为1到n的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次。能够在O(n)的时间复杂度,O(1)的空...
  • SunnyYoona
  • SunnyYoona
  • 2014年09月22日 11:35
  • 1450

一条sql语句分别统计出来两张表的数据

http://bbs.csdn.net/topics/380114638 come表,nocome表,分别有字段tid,然后我要从come表和nocome表分别统计出来tid的次数。统计的结果要是...
  • A9925
  • A9925
  • 2016年02月15日 19:35
  • 1161
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典SQL之数据统计
举报原因:
原因补充:

(最多只允许输入30个字)