当前位置: 代码迷 >> 报表 >> 向高手请问sql一条 急
  详细解决方案

向高手请问sql一条 急

热度:198   发布时间:2016-05-05 08:05:34.0
向高手请教sql一条 急急急
CREATE TABLE `tbl_daily_report_blogger` (
  `create_date` DATE NOT NULL COMMENT '创建日期',
  `campaign_id` CHAR(16) COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '广告主键',
  `blogger_id` CHAR(16) COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'blogger主键',
  `imp_amount` INTEGER(10) NOT NULL DEFAULT '0' COMMENT '展示量',
  `click_amount` INTEGER(8) NOT NULL DEFAULT '0' COMMENT '点击量'

)

  
  SELECT create_date,sum(imp_amount),sum(click_amount)
FROM tbl_daily_report_blogger  
WHERE blogger_id=‘111111’
GROUP BY create_date 
  ORDER BY create_date asc


大体意思是这样的



数据库里有
2008-12-01 10 1000
2008-12-03 10 1000

怎样查出来是
2008-12-01 10 1000
2008-12-02 0 0
2008-12-03 10 1000

想了很长时间

只是想到可以拿到最大最小时间 怎样把所有的时间遍历出来,达到上面的效果



------解决方案--------------------
生成一个12月份完整日期的临时表,即1-31日,临时表只有日期字段,再与工作表连接
SELECT create_date,sum(imp_amount),sum(click_amount) FROM (
SELECT 日期,0,0 FROM 临时表
UNION ALL
SELECT create_date,imp_amount,click_amount FROM 工作表) A
WHERE blogger_id=‘111111’
GROUP BY create_date
ORDER BY create_date asc 

------解决方案--------------------
实现这个功能,如果是非oracle数据库,
则需要建一张日历表
cretae table calendar (
cdate DATE constraint pk_calendar primary key
)

然后生成全年日历,这个可以通过EXCEL生成一个日期序列,然后用公式生成SQL语句,一次性INSERT就行了。

SQL code
SELECT cdate,sum(imp_amount),sum(click_amount) FROM calendar c left join tbl_daily_report_blogger d    on c.cdate=d.create_dateWHERE blogger_id=‘111111’ GROUP BY create_date ;
------解决方案--------------------
http://218.28.143.234/demo,这里有个补齐日期的报表演示。制作很简单的。可以到qq群60531400讨论
------解决方案--------------------
帮顶
------解决方案--------------------
帮顶
------解决方案--------------------
这个用2楼的方法应该可以
  相关解决方案