加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver 行转列

发布时间:2020-12-12 14:10:46 所属栏目:MsSql教程 来源:网络整理
导读:sqlserver把行转成列在我们编码中是经常遇到的我做一个小例子大家看一下 --创建一个表 create table PayPhoneMoney ( id int identity(1,1),userName Nvarchar(20),payType nvarchar(20),money decimal,payTime datetime,constraint pk_id primary key(id) )

sqlserver把行转成列在我们编码中是经常遇到的我做一个小例子大家看一下

--创建一个表
 create table PayPhoneMoney
 (
     id int identity(1,1),userName Nvarchar(20),payType nvarchar(20),money   decimal,payTime datetime,constraint pk_id primary key(id)
 )
 --插入点数据
 insert into PayPhoneMoney values('小李','支付宝',20,'2012-01-03')
 insert into PayPhoneMoney values('小陈','工行','2012-01-06')
 insert into PayPhoneMoney values('小赵','交行',50,'2012-01-06')
 insert into PayPhoneMoney values('小陈',60,30,'2012-01-16')
 insert into PayPhoneMoney values('小张','中行','2012-01-16')
 insert into PayPhoneMoney values('小李','2012-01-16')

看一下表中的数据

我们要想查一下每个人所有支付形式下的总钱数如图所示

-- 查一下每个人所有支付形式下的总钱数
 select userName from PayPhoneMoney group by userName
 select userName,sum(case payType when '支付宝' then money else 0 end) as 支付宝,sum(case payType when '工行' then money else 0 end) as 工行,sum(case payType when '交行' then money else 0 end) as 交行,sum(case payType when '中行' then money else 0 end) as 中行
 from PayPhoneMoney 
 group by userName

--我们这只列出了几种支付方式实际中还有很多支付方式不能一个一个都用case when 吧
--可以这样?

declare @cmdText varchar(8000)
 set @cmdText='select userName,'
 select @cmdText=@cmdText+' sum(case payType when'''+payType+'''Then money else 0 end) as '''+payType
 +''','+char(10) from (select Distinct payType from PayPhoneMoney) T
 print @cmdText--发现多一个逗号下面把逗号去掉
 set @cmdText=left(@cmdText,len(@cmdText)-2)--去掉逗号
 set @cmdText=@cmdText+'from PayPhoneMoney group by userName'
 print @cmdText
 exec(@cmdText)

看一下结果是一样的吧

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读