好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

将一列数据查询显示成一行

将一列数据查询显示成一行

T-SQL学习:将一列数据查询显示成一行

 

     前几天,刚参加工作的同学提一出问题:SQL Server中如何将一列数据以一行的方式显示出来?

     当时在看有关SQL中行列互转的问题,便以行列互转的方式考虑了一下,没有得出解决方法;后又到园子里搜索了一下,也没搜索到比较好的方法,有些方法又太复杂,以目前的水平还吃不透,因为他的问题就比较简单,没考虑程序中的处理,也没说大数据量时会怎么样,只是单纯地想一想如何实现?

     之后试出来了一个方法,比较简单,以下列出代码:

 --  步骤1:准备测试用的表和数据 
 IF   OBJECT_ID ( '  report  ' )  IS   NOT   NULL     --  当前数据库中如果已存在report表,则删除 
     DROP   TABLE   report
  GO 
 CREATE   TABLE  report     --  创建report测试表 
 (
    stuName   NVARCHAR ( 20 )  NOT   NULL  ,
    stuReport   DECIMAL ( 12 , 0 )  NULL  
)
  GO 
 INSERT   INTO  report(stuName,stuReport)   --  往表中插入测试数据 
     SELECT   '  王小芳  ' , 80   UNION   ALL 
     SELECT   '  林志强  ' , 75   UNION   ALL 
     SELECT   '  刘瑞英  ' , 97   UNION   ALL 
     SELECT   '  赵华飞  ' , 65   UNION   ALL 
     SELECT   '  张锦云  ' , 55   UNION   ALL 
     SELECT   '  张建国  ' , 67 
 GO 
 --  查询表中数据 
 SELECT  stuName,stuReport  FROM  report  ORDER   BY   stuReport
  GO 

     表中的数据如图所示:

     现在将成绩一列以一行的方式查询显示出来,代码如下:

 --  步骤2:实现一列转一行 
 DECLARE   @var   NVARCHAR ( 4000  )
  SET   @var  =  '' 
 SELECT   @var  =  @var  +  '  ,  '  +  CAST (stuReport  AS   NVARCHAR ( 10 )) + 
                     '   AS   ''  column  '  +  CAST (stuReport  AS   NVARCHAR ( 10 )) +  ''''    --  自定义列名显示 
     FROM  report                --  将report表中的stuReport数据转换成字符串拼接进@var变量,每条数据之间以英文逗号分隔 
     ORDER   BY   stuReport

  SET   @var  =  STUFF ( @var , 1 , 1 , '' )      --  去掉@var中的第一个逗号 
 SELECT   @var     --  测试输出拼好的@var 
 EXEC ( '  SELECT   '  +  @var )    --  在@var前添加SELECT关键字,组成一条SELECT语句,并执行这条语句 
 GO 

     拼接好的@var变量的值如下:

 55   AS   '  column55  ' , 65   AS   '  column65  ' , 67   AS   '  column67  ' , 75   AS   '  column75  ' , 80   AS   '  column80  ' , 97   AS   '  column97  ' 

     在此字符串前再拼接上SELECT(注意有一空格),即可组成一条SELECT语句,再通过EXEC执行,最终得到的效果如下图所示:

     了解了代码实际情况后,大家都看出这是一个有点投机取巧的方式,比较傻瓜式;第一次发表随笔,以后会继续努力!

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于将一列数据查询显示成一行的详细内容...

  阅读:49次