一个非常常见的报表,分析会员组成比例 以及最新增长情况 和上月同期会员增长情况。
比较特殊一点的是 报表中的 普通会员 和 金卡会员 临时会员 银卡会员 等列 都是根据会员等级配置表动态生成的(即我是不知道会有多少个vip等级的)。
 
sql如下(有点挫的感觉 应该会有更优雅的方式实现):
 
select  N=1, AgentID, AgentBigArea,  AgentName,CusALevel,CusCreateDate into #temp from Customer inner join CusAccount on  
CusAVIPNo = VIPNo inner join Agent on AgentID = CusAgentID where CusStatus = 1 and CusCreateDate<'2016-03-31 23:59:59'

--插入区域小计
insert into #temp select SUM(N),-1,AgentBigArea+'_小计',AgentBigArea+'_小计',CusALevel,'' from #temp group by AgentBigArea,CusALevel

--插入总计
insert into #temp select SUM(N),-1,'总合计','总合计',CusALevel,'' from #temp where AgentBigArea not like '%小计%' group by CusALevel
 
declare @sql nvarchar(max)

 
-- 空格这么多是因为不能设置字符串长度  很挫 暂时这样处理吧
set @sql = 'select ''                                                                             '' as ''增长率'', Agentname as ''分销商'',agentid,AgentBigArea as ''区域'', SUM(case when CusCreateDate>''2016-03-01'' and CusCreateDate<''2016-03-31'' then N else 0 end) as ''本期'' ,
SUM(case when CusCreateDate>Dateadd(MONTH, -1, ''2016/3/1 0:00:00'') and CusCreateDate<Dateadd(MONTH, -1, ''2016/3/31 0:00:00'') then N else 0 end) as ''上期'',
SUM(N) as ''总会员数'''

--动态行转列
SELECT @sql = @sql + ',SUM(case CusALevel when ' +CAST(CusLevelID as nvarchar(10))+' then N else 0 end) as [' +CusLevelName+']'    
FROM
  (SELECT TOP 10000 CusLevelID,CusLevelName                  
   FROM CusLevel  
    ) AS a
print @sql
 SET @sql = @sql + ' into ##temp1 from #temp group by agentname,agentid,AgentBigArea order by AgentBigArea '
 
 EXEC (@sql)
 

--个人觉得比较挫的地方 用到了全局临时表
 select * into #temp2 from ##temp1
 drop table ##temp1  
 
 --计算区域小计行的本期和上期
 update #temp2 set 本期=bq,上期=sq from #temp2 inner join (select 区域+'_小计' as AgentBigArea,  SUM(上期) as sq,SUM(本期) as bq from #temp2
 where 区域 not like '%小计%' group by 区域 ) as t on t.AgentBigArea = #temp2.区域  where #temp2.区域 like '%小计%'
 
 --计算总合计的本期和上期
 update #temp2 set 本期=(select SUM(本期) from #temp2 where 区域 like '%小计%' ),上期=(select SUM(上期) from #temp2 where 区域 like '%小计%' ) where 区域 = '总合计'
 
  --计算增长率
  update #temp2 set 增长率 = (case 上期 when 0 then '' else convert(varchar(30),cast((本期-上期)/convert(decimal(10,2),上期) *100 as decimal(18,2)) )+'%' end)  from #temp2
 
  select * from #temp2

 
 
 

vip会员统计表 (vip等级是灵活配置的 非写死1是金卡用户 2是什么 等)的更多相关文章

  1. 游戏中VIP会员模块的简单实现

    哈哈  今天周末有时间,再整理一篇博文上来,虽然已经不做游戏老长时间了,但还是要把以前做过的东西总结一下,借此可以回顾以前的东西,也可以分享给大家. 今天说一下游戏中VIP会员模块的实现思路.每款游戏 ...

  2. 限制只有VIP会员才能下载Ecshop文章页的附件

    以官方2.7.2默认模板为基础来讲述一下"如何在文章详情页限制只有VIP会员才能下载相关附件"这里假设VIP会员的等级ID为2首先修改 article.php 文件打开 /arti ...

  3. 不开vip会员照样看vip电影(亲测有效)

    此为临时链接,仅用于文章预览,将在短期内失效关闭 不开vip会员照样看vip电影(亲测有效) 2018-03-08 mr_lee Python达人课堂 刚刚测试,真实有效,颇不接待要分享了... 土豪 ...

  4. 破解VIP会员视频集合

    浏览器安装暴力猴扩展即可使用 // ==UserScript== // @name 破解VIP会员视频集合 // @namespace https://greasyfork.org/zh-CN/use ...

  5. 参数(条件表)灵活配置GS01/GS02/GS03

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. oracle 11g rac 修改VIP、scan VIP、priv IP

    11GR2 RAC modify vip,public ip,private ip,scan vip实施步骤1 修改目的    根据业务的需求,需要由原来的临时IP改为生产ip,以下为调整前后对应的I ...

  7. 【FICO系列】SAP 参数(条件表)灵活配置GS01/GS02/GS03

      公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP 参数(条件表)灵活配 ...

  8. 前端快闪三:多环境灵活配置react

    你已经使用Create React App脚手架搭建了React应用,现在该部署了. 一般会使用npm run build或者yarn build构建出静态资源, 由web服务器承载. 您会体验到 多 ...

  9. MongoDB ReplacaSet & Sharding集群安装 配置 和 非集群情况的安装 配置 -摘自网络

    单台机器做sharding --单机配置集群服务(Sharding) --shard1_1 mongod --install --serviceName MongoDBServerShard1 --s ...

随机推荐

  1. Opserver 初探二《exceptions配置》

    上一节主要介绍Opserver的搭建以及redis.sqlserver监控的配置,本节主要介绍异常日志的记录和监控.要实现异常日志的监控我们需要在项目中引入StackExchange.Exceptio ...

  2. Win7 Eclipse调试Centos Hadoop2.2-Mapreduce(转)

    一. 自己搭建开发环境 今天自己搭建了一套Centos5.3 + Hadoop2.2 + Hbase0.96.1.1的开发环境,Win7 Eclipse调试MapReduce成功.可能是版本比较高的原 ...

  3. ASP.NET站点Windows身份验证集成AD域,非LDAP

    站点集成AD域验证 服务器机器入域 计算机右键属性-->“更改设置”-->“更改”-->填写所属域,确认后重启机器生效. 部署测试站点,localhost.ip.域名三种方式登录效果 ...

  4. webpack局部安装的问题

    webpack的局部安装 npm install webpack 默认状态是当前目录下安装,-g是全局安装 ---------------------------------------------- ...

  5. ls命令显示的total你知道代表着什么吗?

    今天我无意间在用ls命令的时候发现显示的内容里的total,这个total代表着什么,引起了我的疑惑. 接下来开始解开它的神秘面纱. total后面的数字是指当前目录下所有文件所占用的空间总和,它是怎 ...

  6. java主线程结束和子线程结束之间的关系

    (一)Main线程是个非守护线程,不能设置成守护线程. 这是因为,main线程是由java虚拟机在启动的时候创建的.main方法开始执行的时候,主线程已经创建好并在运行了.对于运行中的线程,调用Thr ...

  7. springweb flux websocket

    直接上代码: import org.springframework.stereotype.Component; import org.springframework.web.reactive.sock ...

  8. java aop做一个接口耗时的计算

    看代码: @Aspect @Component public class TimeCostAspect { private static Logger logger = LoggerFactory.g ...

  9. springboot-12-自定义拦截器的配置interceptor

    springmvc中拦截器的概念已经被弱化了, springboot中使用的也不甚广泛, 通常在用户登录等方面仍有用处 创建拦截器步骤: , 创建拦截器类继承HandlerInterceptor , ...

  10. Aviator 表达式求值引擎开源框架

    简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...