将一列数据查询显示成一行
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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did46105