CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

应该是个行列转换的问题,有谁告诉我怎么做?

楼主csddb(冬瓜)2005-08-03 15:40:55 在 MS-SQL Server / 疑难问题 提问

表结构如下:  
                  日期                           名字                     价格  
                  20050505                     a                         2  
                  20050506                     b                         3  
                  20050507                     c                         5  
  其他的数据依次类推,名字可能还会有D,E,F之类的  
   
  要求得到这样的结果  
                日期                     a             b             c         d           e  
                20050505             2             0             0         0           0  
                20050506             0             3             0         0           0  
                20050507             0             0             5         0           0  
  等等,名字中有多少个不相同的,那么标题拦就要出现多少个名字  
  请问怎么写啊? 问题点数:20、回复次数:4Top

1 楼hlq8210(影子)回复于 2005-08-03 15:50:11 得分 10

declare   @a   varchar(1000)  
  set   @a='select   name   '  
  select   @a=@a+',sum(case   when   a='''+a+'''   then   b   end)'+'   as   '+   a   ----這裡sum改為min或max結果一樣  
  from   (select   distinct   a   from   TableA)T1  
  set   @a=@a+'   from   TableA     group   by   name'  
  --exec(@a)  
  print   (@a)  
  select   name   ,sum(case   when   a='andy   '   then   b   end)   as   andy   ,sum(case   when   a='fenlam'   then   b   end)   as   fenlam   from   TableA     group   by   name  
  (我的測試表是   Tablea(name   ,a,b)以a開始行列轉換  
  Top

2 楼vivianfdlpw()回复于 2005-08-03 16:26:34 得分 10

create   table   A  
  (  
      [日期]   varchar(10),  
      [名字]   varchar(10),  
      [价格]   int  
  )  
  insert   A  
  select   '20050505','a',2   union  
  select   '20050506','b',3   union  
  select   '20050507','c',5   union  
  select   '20050508','d',2   union  
  select   '20050509','e',2    
   
  --测试  
  declare   @sql   varchar(2000)  
  set   @sql=''  
  select   @sql=@sql+',['+[名字]+']=sum(case   when   [名字]='''+[名字]+'''   then   [价格]   else   0   end)'  
  from   A  
  group   by   [名字]  
  set   @sql='select   [日期]'+@sql+'   from   A   group   by   [日期]'  
  --print   @sql  
  exec(@sql)  
   
  --删除测试环境  
  drop   table   A  
   
  --结果  
  /*  
  日期                   a                       b                       c                       d                       e    
  ----------   -----------   -----------   -----------   -----------   ----  
  20050505       2                       0                       0                       0                       0  
  20050506       0                       3                       0                       0                       0  
  20050507       0                       0                       5                       0                       0  
  20050508       0                       0                       0                       2                       0  
  20050509       0                       0                       0                       0                       2  
  */Top

3 楼filebat(Mark)回复于 2005-08-03 20:44:36 得分 0

呵呵,又是一个列不定的交叉数据报表问题.Top

4 楼xianggang101(tanjun)回复于 2005-08-09 14:11:41 得分 0

一般地经典Top

相关问题

  • 行列转换
  • 行列转换
  • 行列转换
  • 固定行、列的行列转换......
  • 高难度:行列转换?
  • 行列转换的问题
  • 表的行列转换
  • 行列转换问题
  • 再求行列转换
  • 急!行列转换问题

关键词

  • unionselect
  • tablea
  • 名字
  • sum
  • 日期
  • varchar
  • case
  • then
  • select

得分解答快速导航

  • 帖主:csddb
  • hlq8210
  • vivianfdlpw

相关链接

  • SQL Server类图书

广告也精彩

反馈

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