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执行,最终得到的效果如下图所示:

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

 

转载于:https://www.cnblogs.com/lxsbw/archive/2013/04/17/3026976.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值