sql中没有类似ACCESS的标准交叉表处理功能.   
  使用CASE和GROUP子句才是正确的选择(sql联机帮助也是这样说的,官方推荐)
动态列的问题,可以通过动态sql语句实现.

--参考:  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_qry]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_qry]  
  GO  
   
  /*--生成交叉表的简单通用存储过程  
   
  根据指定的表名,纵横字段,统计字段,自动生成交叉表  
  并可根据需要生成纵横两个方向的合计  
   
  注意,横向字段数目如果大于纵向字段数目,将自动交换纵横字段  
  如果不要此功能,则去掉交换处理部分  
   
  --邹建   2004.06(引用请保留此信息)--*/  
   
  /*--调用示例  
   
  exec   p_qry   'syscolumns','id','colid','colid','name   like   ''s%''',1,1  
  --*/  
   
  create   proc   p_qry  
  @TableName   sysname, --表名  
  @纵轴   sysname, --交叉表最左面的列  
  @横轴   sysname, --交叉表最上面的列  
  @表体内容   sysname, --交叉表的数数据字段  
  @条件   varchar(1000),--查询的处理条件  
  @是否加横向合计   bit, --为1时在交叉表横向最右边加横向合计  
  @是否家纵向合计   bit --为1时在交叉表纵向最下边加纵向合计  
  as  
  declare   @s   nvarchar(4000),@sql   varchar(8000)  
   
  --规范条件  
  set   @条件=case   when   @条件<>''   then   '   where   ('+@条件+')'   else   ''   end  
   
  --判断横向字段是否大于纵向字段数目,如果是,则交换纵横字段  
  set   @s='declare   @a   sysname  
  if(select   case   when   count(distinct   ['+@纵轴+'])<count(distinct   ['+@横轴+'])   then   1   else   0   end  
  from   ['+@TableName+']   '+@条件+')=1  
  select   @a=@纵轴,@纵轴=@横轴,@横轴=@a'  
  exec   sp_executesql   @s  
  ,N'@纵轴   sysname   out,@横轴   sysname   out'  
  ,@纵轴   out,@横轴   out  
   
  --生成交叉表处理语句  
  set   @s='  
  set   @s=''''  
  select   @s=@s+'',[''+cast(['+@横轴+']   as   varchar)+'']=sum(case   ['+@横轴  
  +']   when   ''''''+cast(['+@横轴+']   as   varchar)+''''''   then   ['+@表体内容+']   else   0   end)''  
  from   ['+@TableName+']  
  '+@条件+'  
  group   by   ['+@横轴+']'  
  exec   sp_executesql   @s  
  ,N'@s   varchar(8000)   out'  
  ,@sql   out  
   
  --是否生成合计字段的处理  
  declare   @sum1   varchar(200),@sum2   varchar(200),@sum3   varchar(200)  
  select   @sum1=case   @是否加横向合计    
  when   1   then   ',[合计]=sum(['+@表体内容+'])'  
  else   ''   end  
  ,@sum2=case   @是否家纵向合计    
  when   1   then   '['+@纵轴+']=case   grouping(['  
  +@纵轴+'])   when   1   then   ''合计''   else   cast(['  
  +@纵轴+']   as   varchar)   end'  
  else   '['+@纵轴+']'   end  
  ,@sum3=case   @是否家纵向合计  
  when   1   then   '   with   rollup'  
  else   ''   end  
   
  --生成交叉表  
  exec('select   '+@sum2+@sql+@sum1+'  
  from   ['+@TableName+']  
  '+@条件+'  
  group   by   ['+@纵轴+']'+@sum3)  
  go

CSDN中相关链接:

http://topic.csdn.net/t/20041229/10/3684609.html

http://topic.csdn.net/t/20050510/01/3993699.html

http://community.csdn.net/Expert/topic/4815/4815049.xml?temp=.2712061

http://topic.csdn.net/t/20050528/09/4041580.html

交叉表查询(TRANSFORM)相关推荐

  1. 【交叉表查询】行列转换的魅力

    本文主要是讲一下行列转换,也就是大家经常讲的交叉表查询. 行列转换在实际的应用中非常的实用,可以大大的减少工作量. 很多时候,在Excel中处理数据时,我们需要统计每个月的销量或者需要填写每个月的销量 ...

  2. Mysql5 实现交叉表查询

    交叉表.行列转换和交叉查询经典 一.什么是交叉表 "交叉表"对象是一个网格,用来根据指定的条件返回值.数据显示在压缩行和列中.这种格式易于比较数据并辨别其趋势.它由三个元素组成: ...

  3. 交叉表查询中的多列显示

    利用交叉表,我们可以对某个列字段的项目进行显示,比如[学科]来显示[考试成绩],那么是否能同时显示其[作业成绩]在同一个交叉表查询中? 比如下面数据 Table3 +-----+--------+-- ...

  4. 交叉表查询中的多列显示。

    利用交叉表,我们可以对某个列字段的项目进行显示,比如[学科]来显示[考试成绩],那么是否能同时显示其[作业成绩]在同一个交叉表查询中? 比如下面数据 Table3 +-----+--------+-- ...

  5. 创建交叉表_质性数据分析软件NVivo教程:交叉表查询

    交叉表查询提供了一种快速的方法来检查案例和人口统计变量之间的编码分布.例如,您可以使用交叉表查询来: 检查受访者回答某特定主题或问题的频率. 比较不同人口群体对主题的看法. 在运行交叉表查询之前,您需 ...

  6. java动态交叉表,SqlServer如何生成动态交叉表查询

    为了说明问题,我们用SqlServer自带的事例数据库(Northwind)来进行验证,所有的例子请放到Northwind中运行,我可能会省略Use语句,所引用的表,都是Northwind中的,下面我 ...

  7. ireport交叉报表 crosstab排序_质性数据分析软件NVivo教程:交叉表查询

    交叉表查询提供了一种快速的方法来检查案例和人口统计变量之间的编码分布.例如,您可以使用交叉表查询来: 检查受访者回答某特定主题或问题的频率. 比较不同人口群体对主题的看法. 在运行交叉表查询之前,您需 ...

  8. 交叉表 mysql_mysql交叉表查询解决方案整理

    交叉表是一种常用的分类汇总查询.使用交叉表查询,可以显示表中某个字段的汇总值,并将它们分组,其中一组列在数据表的左侧,另一组列在数据表的上部.行和列的交叉处可以对数据进行多种汇总计算,如:求和.平均值 ...

  9. 在MySQL中实现交叉表查询2(动态交叉表)

    在MySQL中实现交叉表查询2(动态交叉表) 交叉表分为静态交叉表和动态交叉表.其中静态交叉表中的列是固定的,因此相对容易实现:而动态交叉表中的列需要动态生成. 一.静态交叉表的实现 参见上一篇文章: ...

  10. Mysql的交叉表查询

    最近由于找工作,所以在恶补PHP和Mysql方面的东西,发现还是学习的不够.这几天看到关于mysql的交叉表查询的内容,根据自己的理解简单的尝试了下. 由于MonsterHunter World较火, ...

最新文章

  1. 服务发现与负载均衡 dubbo zk原理
  2. (原创)一个JavaScript Function Outliner插件 第三个版本 让你的JavaScript代码也支持折叠...
  3. 云原生时代下的12-factor应用与实践
  4. HTML的checkbox和radio的美化
  5. Linux学习之系统编程篇:练习验证线程共享全局变量
  6. httpd开启status模块_开启Apache Server Status
  7. kali linux改中文_【亲测实验】kali linux 2020 设置为中文方法
  8. yii2 controller 接收get形式传输过来的参数
  9. javascript之querySelector和querySelectorAll
  10. Mathematic Paradigm
  11. 苹果屏保壁纸_抖音超火的时间轮盘屏保,安卓苹果都可以用。
  12. 虚拟机VM 安装CoreOS
  13. 使用kubeasz自动化部署K8s
  14. WiFi相关知识介绍
  15. 三峡大坝水位落差达40层楼高,船舶要如何翻越?
  16. PS学习-剪切蒙版制作艺术字
  17. 华为mate40Android,【猫哥爆料】史上最强Mate40官宣,坐实年度安卓机皇!
  18. 强烈推荐:曹方,《遇见我》
  19. 业余时间研究了下微信小程序版的街机游戏模拟器,8090后的童年回忆啊
  20. 关于SpringMVC的XML配置步骤

热门文章

  1. 2021-2027全球与中国DLP便携式投影仪市场现状及未来发展趋势
  2. 共享打印机无法连接报0x00000709
  3. 阻止AlertDialog关闭
  4. delphi出现‘尚未调用CoInitialize’异常
  5. 下面没有了......
  6. 程序性动画——触手的逆向运动学
  7. 计算机中的字符和字节的关系
  8. 哪种蓝牙耳机最好用?2022质量最好的无线蓝牙耳机排行榜
  9. 卧槽,电脑版微信终于可以刷朋友圈了!
  10. 服务器文件爱报中毒,网吧盗号常见途径总结以及解决办法