经典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(统计SQL表大小和行数)

  • 2012年03月24日 16:50
  • 298B
  • 下载

经典的,统计SQL语句

SELECT a.id as aid,a.name,b.id as bid,b.visits,b.title,b.out_member_id,b.time,b.edit_time,b.visits,b...
  • qq_16490557
  • qq_16490557
  • 2014年07月01日 09:11
  • 312

50条经典SQL语句~~值得一看!

/*student(学号#,姓名,性别,年龄) course(课程号#,课程名,教师号#) score(学号#,课程号#,成绩) teacher(教师号#,教师名)*/  --1.查询“001”课程比...
  • qq920811275
  • qq920811275
  • 2016年09月27日 11:35
  • 2421

数据统计SQL

-- 查询当前这周的数据 -- ((ticketnumber - salenumber)*ticketactprice) (100,100)*100 SELECT sum(ticketpri...
  • sixteen_cicle
  • sixteen_cicle
  • 2017年03月07日 09:43
  • 132

SQL获得连续的记录的统计

SELECT TYEAR, MIN(TDATE) AS STARTDATE, MAX(TDATE), COUNT(TYEAR) AS ENDNUM --TYEAR年,STARTDATE连续记录的开始时...
  • letnet1981
  • letnet1981
  • 2016年06月21日 10:15
  • 1248

MYSQL经典SQL之时长统计

背景假设我们有一张表,记录了用户的登入、登出信息,我们需要根据这些信息统计用户的在线时长,相应的设置用户等级,就像挂QQ升级表数据如下:mysql> select * from user_sessio...
  • Sun_XP_1988
  • Sun_XP_1988
  • 2017年01月06日 14:52
  • 972

(SQL入门经典+SQL必知必会+视频)笔记之一

一、了解SQL 1. 关系型数据库管理系统(RDBMS) 2. 结构化查询语言(SQL)——关系型数据库进行通信的标准语言 3. ANSI标准——可移植性和易用性 4. 连接数据库:CONNE...
  • HaixWang
  • HaixWang
  • 2016年12月03日 13:23
  • 2103

常用的数据统计Sql 总结

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

经典SQL语句

本人总结了数据库查询中一些比较复杂的查询,如链表查询,多重子查询,连表查询+子查询等,由于技术有限,并没有太多考虑sql语句的优化,如有不足之处,敬请谅解。 create table student(...
  • dongnan591172113
  • dongnan591172113
  • 2016年07月14日 11:05
  • 640

经典SQL脚本大全

  • 2013年12月24日 15:28
  • 274KB
  • 下载
收藏助手
不良信息举报
您举报文章:经典SQL之数据统计
举报原因:
原因补充:

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