CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

求sql语句实现交叉表,内容详见内

楼主flyingbird_zz(飞鸟)2006-03-21 09:01:55 在 MS-SQL Server / 疑难问题 提问

我有个表如下:  
  A                 B                 C  
  x                 01               aaa  
  x                 02               bbb  
  x                 03               ccc  
  y                 01               ddd  
  y                 03               eee  
  z                 04               fff  
  ……(此处B列的值不固定,也许还会有05/06/07/08……)  
   
  我要用sql语句得到下面的结果  
  A             01             02               03               04  
  x             aaa           bbb             ccc             (null)  
  y             ddd           (null)       eee             (null)  
  z             (null)     (null)       (null)       fff  
  ……  
   
  请问怎么写?  
   
  问题点数:100、回复次数:6Top

1 楼rivery(river)回复于 2006-03-21 09:09:47 得分 20

declare   @sql   varchar(8000)  
  select   @sql=''  
  select   @sql=@sql+',['+B+']=max(case   B   when   '''+B+'''   then   C   end)'  
  from   tablename  
  group   by   B  
   
  exec('select   A'+@sql+'   from   tablename   group   by   A')  
  Top

2 楼zlp321002(Life Is Good,Let's Shine)回复于 2006-03-21 09:12:32 得分 30

----SQL   SEVER   2005(如下)----  
  --测试环境  
  Create   table   TA(A   varchar(10),   B   varchar(10),   C   varchar(10))  
  insert   into   TA   select   'x','01','aaa'  
  union   all   select   'x','02','bbb'  
  union   all   select   'x','03','ccc'  
  union   all   select   'y','01','ddd'  
  union   all   select   'y','03','eee'  
  union   all   select   'z','04','fff'  
   
  --动态SQL  
  DECLARE   @PIT   AS   VARCHAR(200)  
  SET   @PIT=''  
  SELECT   @PIT=@PIT+',['+B+']'   FROM   TA  
  GROUP   BY   B  
  SET   @PIT=STUFF(@PIT,1,1,'')  
  EXEC('  
  select   *   from   Ta  
  PIVOT  
  (MAX(C)  
    FOR   B   IN   ('+@PIT+')  
  )   PT  
  ')  
  --结果  
  /*  
  A                     01                   02                   03                   04  
  ----------   ----------   ----------   ----------   ----------  
  x                     aaa                 bbb                 ccc                 NULL  
  y                     ddd                 NULL               eee                 NULL  
  z                     NULL               NULL               NULL               fff  
   
  (3   行受影响)  
   
  */Top

3 楼rivery(river)回复于 2006-03-21 09:13:07 得分 50

--测试表  
  create   table   #(A   varchar(20),B   varchar(20),C   varchar(20))  
  insert   into   #  
  select   'x','01','aaa'   union  
  select   'x','02','bbb'   union  
  select   'x','03','ccc'   union  
  select   'y','01','ddd'   union  
  select   'y','03','eee'   union  
  select   'z','04','fff'  
  go  
  --处理语句  
  declare   @sql   varchar(8000)  
  select   @sql=''  
  select   @sql=@sql+',['+B+']=max(case   B   when   '''+B+'''   then   C   end)'  
  from   #  
  group   by   B  
   
  exec('select   A'+@sql+'   from   #   group   by   A')  
  --删除测试表  
  drop   table   #  
  go  
  --结果  
  /*  
  x aaa bbb ccc NULL  
  y ddd NULL eee NULL  
  z NULL NULL NULL fff  
   
  */Top

4 楼flyingbird_zz(飞鸟)回复于 2006-03-21 09:58:40 得分 0

zlp321002:你的那个语句我不能用,不知道是不是因为你那个是sql2005而我这是sql2000的缘故  
   
  另外几位的能用,但是生成的列名不是按01/02/03/04顺序排序,请问应该怎么解决?Top

5 楼flyingbird_zz(飞鸟)回复于 2006-03-21 09:59:55 得分 0

sorry,可以排序的,谢谢以上各位Top

6 楼zlp321002(Life Is Good,Let's Shine)回复于 2006-03-21 10:02:13 得分 0

--我的是SQL   SERVER   2005支持的语法.   SQL   server   2000   中你添加个   order   by   B   即可.Top

相关问题

  • 交叉表查询,求sql语句
  • 用SQL语句实现交叉表
  • 求一条sql语句,关于交叉表sql语句的问题!!
  • mysql交叉表语句
  • 重奖!!!请问,sql server中有类似于access中的交叉表语句吗???
  • 导sql数据到Excel成交叉表,怎样写语句?谢谢!
  • 怎么把这个查询语句块转换成一个SQL语句(关于交叉表的)
  • 如何用SQL生成交叉表?
  • 关于SQL中交叉表问题
  • 关于SQL中交叉表问题

关键词

  • sql
  • null
  • pit
  • eee
  • fff
  • union
  • varchar
  • ddd
  • ccc
  • aaa

得分解答快速导航

  • 帖主:flyingbird_zz
  • rivery
  • zlp321002
  • rivery

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo