zoukankan      html  css  js  c++  java
  • SQL语句实现横排(感谢原作者,以及修改小bug的作者)

    有一个表:  
    BH            GZLB          JE  
    ----------------------  
    001            A              100  
    001            B              150  
    001            C              110  
    002            A              99  
    002            B              180  
    002            C              150  
    003            A              160  
    003            B              170  
    003            C              130  
    用SQL语句如何将上面的表变成下面横向的排列方式呢。  
    BH        A      B      C  
    -------------------  
    001    100    150  110  
    002    99     180  150  
    003    160    170  130        
    (GZLB  里面的字段是动态的,不是只有A,B,C  可能还有A,B,C,D,E...)  

    先创建以上的测试数据表

     1 if  exists(select  name  from  sysobjects  where  name='tblA'  and  xtype='U')   
     2      drop  table  tblA   
     3   
     4 create  table  tblA(   
     5    BH  char(3)  not  null,   
     6    GZLB  varchar(3)  not  null,   
     7    JE  int  not  null   
     8 )   
     9 go   
    10   
    11 insert  tblA  values('001',            'A',              100)   
    12 insert  tblA  values('001',            'B',              150)   
    13 insert  tblA  values('001',            'C',              110)   
    14 insert  tblA  values('002',            'A',              99)   
    15 insert  tblA  values('002',            'B',              180)   
    16 insert  tblA  values('002',            'C',              150)   
    17 insert  tblA  values('003',            'A',              160)   
    18 insert  tblA  values('003',            'B',              170)   
    19 insert  tblA  values('003',            'C',              130)  
    插入的代码

    动态sql的实现

     1 declare  @sql  varchar(6000)   
     2    set  @sql  =  'select  '   
     3    --一直在想动态sql语句有什么用,今天算是见识到了,可以把sql语句当字符串(缩了句废话)
     4    --下面的语句是给@sql赋值,其实就是拼接字符串,下面的一句@sql赋值语句等效于以下的sql语句
     5    -- select    sum(case  GZLB  when  'A'  then  JE  else  null  end)  [A],  
     6    --sum(case  GZLB  when  'B'  then  JE  else  null  end)  [B], 
     7    --sum(case  GZLB  when  'C'  then  JE  else  null  end)  [C],
     8    --所以动态sql可以节省程序员写如以上的重复代码。小小的一段代码,深藏功与名啊。再说一点,...from (select  distinct  GZLB  as  GZLB    from  tblA)中,
     9    --(select  distinct  GZLB  as  GZLB    from  tblA)相当于一个表,但是如果要把它当表用,必须给它一个自定义表名,本赋值语句给的是tmp,否则会报错
    10    select  @sql  =  @sql  +'  sum(case  GZLB  when  '''+  GZLB  +'''  then  JE  else  null  end)  ['+  GZLB  +'],'  from  (select  distinct  GZLB  as  GZLB    from  tblA)  tmp   
    11    set  @sql  =  substring(@sql,  1,  len(@sql)-1)  +'  from  tblA  group  by  BH'   
    12    exec(@sql)   
    View Code

    执行结果如图:

    (先说到这,以后补充)

  • 相关阅读:
    C++经典书籍:游戏编程
    云计算学习笔记Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战
    A win for the Nokia N8 is a win for Qt
    Qt 为中国移动音乐客户端提供多平台支持
    诺基亚力邀App开发员加入Ovi以对抗苹果
    MeeGo手机或将跳票至2011年
    TinyXML:一个优秀的C++ XML解析器
    企业开发中Qt和.Net小谈
    Qt 的昨天,今天,明天
    学机械的看看吧,一般看不见的机械原理——全动画图解
  • 原文地址:https://www.cnblogs.com/jiangxiaofan/p/3079939.html
Copyright © 2011-2022 走看看