案例1-分组交叉表:

案例3:CREATE proc p_qry
@JFKMBID varchar(20),
@JFKMBSYSID varchar(1000),
@date1 datetime,
@date2 datetime,
@r_count int
as
set nocount on--分拆 @JFKMBSYSID
declare @i int
set @i=len(@JFKMBSYSID)
if isnull(@i,0)<1 return
set rowcount @i
select id=identity(int) into #t from syscolumns a,syscolumns b
set rowcount @i
select jFKMBSYSID=substring(@JFKMBSYSID,id,patindex('%[,;]%',stuff(@JFKMBSYSID+',',1,id,''))),gid=case when substring(','+@JFKMBSYSID,id,1)=',' then 0 else 1 end,sid=0
into #t1 from #t
where substring(','+@JFKMBSYSID,id,1) in(',',';')
order by id--生成分组标志
select @i=1
update #t1 set @i=case when gid=0 then @i else @i+1 end,gid=@i--生成处理数据
select a1.gid,a2.PX,b.qydm,cnt=count(*),sid=0
into #t2
from #t1 a1,S_IntegralMode a2,S_PntegralFactInfo b
where a1.jFKMBSYSID=a2.jFKMBSYSIDand a2.jFKMBSYSID=b.jFKMBSYSIDand b.slsj>=convert(char(10),@date1,120)and b.slsj=@r_count)--生成交叉表处理标志
declare @gid int,@PX int
set @i=1
update #t2 set @i=case when @gid=gid then case when @PX=PX then @i else @i+1 endelse 1 end,@gid=gid,@PX=PX,sid=@i--生成交叉表处理语句
declare @s1 varchar(8000),@s2 varchar(8000),@s3 varchar(8000),@s4 varchar(8000)
select @s1='',@s2='',@s3='',@s4='',@i=max(sid) from #t2
while @i>0select @s1=',[col'+rtrim(@i)+']=cast(sum(case sid when '+rtrim(@i)+' then cnt else 0 end) as varchar)'+@s1,@s2=',[col'+rtrim(@i)+']=max(case sid when '+rtrim(@i)+' then cast(PX as varchar) else '''' end)'+@s2,@s3=',a.[col'+rtrim(@i)+']'+@s3,@i=@i-1--显示结果
exec('select qymc=isnull(b.qymc,a.qydm)'+@s3+'from(select gid,qydm,s1=1'+@s1+' from #t2 group by gid,qydmunion allselect gid,''查询分组''+rtrim(gid),s1=0'+@s2+' from #t2 group by gidunion allselect gid,''分组''+rtrim(gid)+''合计'',s1=2'+@s1+' from #t2 group by gid)a left join S_Enterprise b on a.qydm=b.qydmorder by a.gid,a.s1,a.qydm
')
GOexec p_qry '4-2005','45,46,47,48;49,50,51,52,53;54,55;56,57,58;59','2005-1-1','2005-1-31',1
godrop proc p_qry/*--测试结果qymc
------
查询分组1   1   2   3   4
象山医药药材有限公司医药商店  1   1   1   1   0
象山同仁堂大药房药业有限公司  3   3   3   3   0
分组1合计   4   4   4   4   0
查询分组2   5   6   7   8   9
象山医药药材有限公司医药商店  1   1   1   1   1
象山同仁堂大药房药业有限公司  3   3   3   3   3
分组2合计   4   4   4   4   4
查询分组3   10  11
象山医药药材有限公司医药商店  1   1   0   0   0
象山同仁堂大药房药业有限公司  3   3   0   0   0
分组3合计   4   4   0   0   0
查询分组4   12  13  14
象山医药药材有限公司医药商店  1   1   1   0   0
象山同仁堂大药房药业有限公司  3   3   3   0   0
分组4合计   4   4   4   0   0
查询分组5   15
象山医药药材有限公司医药商店  1   0   0   0   0
象山同仁堂大药房药业有限公司  3   0   0   0   0
分组5合计   4   0   0   0   0
--*/

案例2-复杂交叉表:

--测试 --测试数据 create table 表(编号 int,分类一 varchar(10),分类二 varchar(10),分类三 varchar(10)) insert 表 select 1,'M1','D1','F1' union all select 1,'M1','D2','F2' union all select 1,'M2','D3','F3' union all select 1,'M2','D3','F4' union all select 1,'M2','D3','F5' union all select 1,'M2','D4','F2' union all select 1,'M2','D4','F7' union all select 1,'M2','D5','F1' union all select 1,'M2','D5','F3' union all select 1,'M3','D6','F8' union all select 1,'M3','D7','F6' go --处理方法2. declare @s varchar(8000) select @s='' select @s=@s+',['+分类一+'_1] varchar(10) default '''',[' +分类一+'_2] varchar(10) default ''''' from 表 group by 分类一 exec('create table #t(id int identity(1,1)'+@s+') declare @s varchar(8000) declare tb cursor local for select s=''declare @t table(id int identity(1,1),a varchar(10),b varchar(10)) declare @r int insert @t select 分类二,分类三 from 表 where 分类一=''''''+分类一+'''''' set @r=@@rowcount update #t set [''+分类一+''_1]=b.a,[''+分类一+''_2]=b.b from #t a join @t b on a.id=b.id if @@rowcount<@r insert #t([''+分类一+''_1],[''+分类一+''_2]) select a.a,a.b from @t a left join #t b on a.id=b.id where b.id is null'' from 表 group by 分类一 open tb fetch next from tb into @s while @@fetch_status=0 begin exec(@s) fetch next from tb into @s end close tb deallocate tb select * from #t ') go --删除测试 drop table 表 /*--测试结果 M1 M1 M2 M2 M3 M3 ---------- ---------- ---------- ---------- ---------- ---------- D1 F1 D3 F3 D6 F8 D2 F2 D3 F4 D7 F6 D3 F5 D4 F2 D4 F7 D5 F1 D5 F3 --*/

案例3-复杂交叉表:

--测试--测试数据
create table 表(编号 int,分类一 varchar(10),分类二 varchar(10),分类三 varchar(10))
insert 表 select 1,'M1','D1','F1'
union all select 1,'M1','D2','F2'union all select 1,'M2','D3','F3'
union all select 1,'M2','D3','F4'
union all select 1,'M2','D3','F5'
union all select 1,'M2','D4','F2'
union all select 1,'M2','D4','F7'
union all select 1,'M2','D5','F1'
union all select 1,'M2','D5','F3'union all select 1,'M3','D6','F8'
union all select 1,'M3','D7','F6'
go--处理
select id=0,* into #t from 表 order by 编号,分类一--,分类二,分类三
declare @a varchar(10),@i int
update #t set @i=case @a when 分类一 then @i+1 else 0 end,id=@i,@a=分类一declare @fd varchar(8000),@s varchar(8000),@t1 varchar(10),@t2 varchar(10)
select @fd='',@s='',@t1='',@t2=''
select @t2='['+分类一+']',@fd=@fd+','+@t2+'=isnull('+@t2+'.分类二,''''),'+@t2+'=isnull('+@t2+'.分类三,'''')',@s=case @t1 when '' then '(select * from #t where 分类一='''+分类一+''')'+@t2 else @s+' full join(select * from #t where 分类一='''+分类一+''')'+@t2+' on '+@t1+'.id='+@t2+'.id ' end,@t1=@t2
from #t group by 分类一select @fd=substring(@fd,2,8000)
exec('select '+@fd+'
from '+@s)--删除处理临时表
drop table #t
go --删除测试
drop table 表/*--测试结果M1         M1         M2         M2         M3         M3
---------- ---------- ---------- ---------- ---------- ----------
D1         F1         D3         F3         D6         F8
D2         F2         D3         F4         D7         F6D3         F5                    D4         F2                    D4         F7                    D5         F1                    D5         F3                             --*/

97.分组交叉表、复杂交叉表相关推荐

  1. 【Pandas分组聚合】进阶:透视表、交叉表(pivot_table() 、crosstab())

    Pandas透视表.交叉表 创建DataFrame结构 透视表 pivot_table() 单列聚合 多列聚合 交叉表 crosstab() 计算分组频率 两列分组后求第三列的统计指标 创建DataF ...

  2. 机器学习之Pandas:Pandas介绍、基本数据操作、DataFrame运算、Pandas画图、文件读取与处、缺失值处理、数据离散化、合并、交叉表和透视表、分组与聚合、案例(超长篇,建议收藏慢慢看)

    文章目录 Pandas 学习目标 1Pandas介绍 学习目标 1 Pandas介绍 2 为什么使用Pandas 3 案例: 问题:如何让数据更有意义的显示?处理刚才的股票数据 给股票涨跌幅数据增加行 ...

  3. 数据科学、管理科学系课程教学课件——FineReport实验指导书节选====明细表、分组表、交叉表

      数据科学.管理科学系的数据大屏.数据报表.商务智能.管理信息系统等课程教学,只需简单的数据库基础,解放学生码代码的时间,用更真实的企业案例,更灵活的将思维落地.本节讲述的是通用报表的分析案例:明细 ...

  4. 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结...

    为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述. 1.在查询结果中显示列名: a.用as关键字:select name as '姓名' ...

  5. [冷枫推荐]:数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。...

    为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述. 1.在查询结果中显示列名: a.用as关键字:select name as '姓名' ...

  6. pandas9_高级处理_交叉表和透视表

    import numpy as np import pandas as pd 交叉表:交叉表用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表) pd.crosstab(valu ...

  7. pandas高级处理-交叉表与透视表

    pandas高级处理-交叉表与透视表 1 交叉表与透视表什么作用  [就是探究两列数据之间的关系] 探究股票的涨跌与星期几有关? 以下图当中表示,week代表星期几,1,0代表这一天股票的涨跌幅是好还 ...

  8. 【Python】开启Pandas进阶:图解Pandas透视表、交叉表

    一.图解Pandas透视表.交叉表 终于开始Pandas进阶内容的写作了.相信很多人都应该知道透视表,在Excel会经常去制作它,来实现数据的分组汇总统计.在Pandas中,我们把它称之为pivot_ ...

  9. pandas基础(part5)--透视表与交叉表

    学习笔记,这个笔记以例子为主. 开发工具:Spyder 文章目录 Pandas透视表 Pandas交叉表 Pandas透视表 透视表(pivot table)是各种电子表格程序和其他数据分析软件中一种 ...

  10. 第2关:Pandas创建透视表和交叉表

    任务描述 本关任务:使用Pandas加载tip.csv文件中的数据集,分别用透视表和交叉表统计顾客在每种用餐时间.每个星期下的小费总和情况. 相关知识 透视表 透视表是各种电子表格程序和其他数据分析软 ...

最新文章

  1. 0x000000ed怎么修复_win10蓝屏代码0x000000ed的修复方法
  2. 传统行业转型微服务的挖坑与填坑
  3. 剑指offer 算法 (举例让抽象具体化)
  4. 美国25大最具价值博客网站出炉
  5. 获得WebBrowser中的图片数据
  6. 如何配note,打补丁
  7. python 文件编码的识别_【python】python编码方式,chardet编码识别库
  8. c++ vector 一部分_C++ vector 使用注意事项
  9. gulp加速hexo的yelee主题
  10. DOA——ESPRIT算法
  11. 论文浅尝 - ICML2020 | 基于子图推理的归纳式关系预测
  12. 理论基础 —— 树 —— 树的存储结构
  13. koa2 mysql 事务_mysqljs在koa2中的正确姿势
  14. Invalid parameter passed to C runtime function
  15. 动态规划 最长公共子序列 过程图解
  16. 李宏毅(机器学习)机器学习概述+线性回归案例分析
  17. 自制舵机(伺服电机)控制系统的一点感想
  18. Linux系统日志管理(redhat)
  19. 2018年7月编程语言TIOBE排行榜
  20. 远程会议连接服务器,远程视频会议软件

热门文章

  1. Fiddler基础教程 - 3. 抓包 | 设置断点 | 捕获设置 | 重定向AutoResponder | 过滤Filters
  2. 巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC
  3. 【信息收集】第一章 域名信息收集
  4. 李炎恢教程/妙味课堂javaScript/jQuery/js/Ajax全套视频
  5. mysql设置中奖率_设置中奖概率
  6. 千亿级数字化活动市场,目睹如何引领行业?
  7. [重庆思庄每日技术分享]-oracle 12c透明加密
  8. 计算机桌面图案在哪里更改,桌面图标更改方法
  9. 来CSDN的第一次正式自我介绍
  10. Python Pandas 函数ix被弃用