sql报表书写技巧

上一篇 / 下一篇  2008-10-16 19:20:13 / 个人分类:mysql

       我们在用sql生成报表的时候,很大的难点就是如何生成自己想要的样式和结果。尤其在限制我们只能用一条sql语句搞定时。下面一个例子是如何用一条sql生成如下一张报表  :

统计报表
专题时间
08-10-1308-10-1408-10-1508-10-1608-10-1708-10-1808-10-19总计
主专题A用户表统计       0
B用户表统计       0
C用户表统计       0
总计       0

select

 t1.fdate ,
 sum(ifnull(t2.A用户表统计,0))  A,
 sum( ifnull(t3.B用户表统计,0)) B,
 sum( ifnull(t4.C用户表统计,0)) C,

fromt_DateJoin_Tempt1
left join
(
SELECT
 date(FRegisterTime)  as regdate,
 count( FUserId) as A用户表统计
 FROM
 TABLE_A
where date(FRegisterTime)  between '2008-09-17' and '2008-12-31'
group by  regdate

)t2 on(t1.fdate = t2.regdate)
left join
(
SELECT
 date(FCreateTime)  as regdate,
 count( FUserId) as B用户表统计
 FROM
 TABLE_B
where date(FCreateTime) between '2008-09-17' and '2008-12-31'
group by  regdate
)t3 on (t1.fdate = t3.regdate)
left join
(
SELECT
 date(FCreateTime)  as regdate,
 count( FUserId) as C用户表统计
 FROM
 TABLE_C
where date(FCreateTime) between '2008-09-17' and '2008-12-31'
group by  regdate
)t4 on (t1.fdate = t4.regdate)
where t1.fdate between '2008-09-17' and date(now())
group by  fdate
with rollup

上面表红色的为重点注意的:

1、with rollup: 在Select中运用count 或 sum对分组统计时,会在结果集的最后一条自动产生一条各组数据的统计之和!,

with rollup之前好像不能有having,否则报错

2、在group中,注意where 和 having的位置及关系

3、在我们数据库中通常可建立一张表(t_DateJoin_Temp):存储连续的日期,以供生成连续日期的报表使用,

以解决相关连的数据表(TABLE_A)中日期不连续的问题


TAG: SQL sql

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2009-01-08  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 503
  • 日志数: 42
  • 建立时间: 2008-07-24
  • 更新时间: 2008-12-30

RSS订阅

Open Toolbar