sqlserver 行转列

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

还写了一篇Linq 实现 DataTable 行转列有时间大家可以看一下

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

复制代码
 1 --创建一个表
2 create table PayPhoneMoney
3 (
4 id int identity(1,1),
5 userName Nvarchar(20),
6 payType nvarchar(20),
7 money decimal,
8 payTime datetime,
9 constraint pk_id primary key(id)
10 )
11 --插入点数据
12 insert into PayPhoneMoney values('小李','支付宝',20,'2012-01-03')
13 insert into PayPhoneMoney values('小陈','工行',20,'2012-01-06')
14 insert into PayPhoneMoney values('小赵','交行',50,'2012-01-06')
15 insert into PayPhoneMoney values('小陈','支付宝',60,'2012-01-06')
16 insert into PayPhoneMoney values('小赵','工行',30,'2012-01-16')
17 insert into PayPhoneMoney values('小张','中行',30,'2012-01-16')
18 insert into PayPhoneMoney values('小李','支付宝',60,'2012-01-16')
复制代码

看一下表中的数据

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

复制代码
1 -- 查一下每个人所有支付形式下的总钱数
2 select userName from PayPhoneMoney group by userName
3 select userName,
4 sum(case payType when '支付宝' then money else 0 end) as 支付宝 ,
5 sum(case payType when '工行' then money else 0 end) as 工行,
6 sum(case payType when '交行' then money else 0 end) as 交行,
7 sum(case payType when '中行' then money else 0 end) as 中行
8 from PayPhoneMoney
9 group by userName
复制代码

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

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

看一下结果是一样的吧


本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/archive/2012/02/01/2334973.html,如需转载请自行联系原作者

相关文章
|
BI 数据库
数据库:SQLServer 实现行转列、列转行用法笔记
官方解释:可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。
数据库:SQLServer 实现行转列、列转行用法笔记
|
SQL 存储 数据库
重温SQL Server的行转列和列转行,面试常考题
行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT…CASE 语句中所指定的语法更简单、更具可读性。下面我们通过几个简单的例子来介绍一下列转行、行转列问题。
重温SQL Server的行转列和列转行,面试常考题
|
SQL Go
SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择
原文:SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择 ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性。
1240 0
|
SQL
SQL SERVER特殊行转列案列一则
原文:SQL SERVER特殊行转列案列一则   今天有个同事找我,他说他有个需求,需要进行行转列,但是又跟一般的行转列有些区别,具体需求如下所说,需要将表1的数据转换为表2的显示格式. 我想了一下,给出了一个解决方法,具体如下所示(先给出测试数据) INSERT INTO TEST ...
840 0
|
SQL Go 存储
SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
原文:SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值) 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段; 方法二:使用拼接SQL,动态列...
5519 0
sqlserver 行转列
还写了一篇Linq 实现 DataTable 行转列有时间大家可以看一下 sqlserver把行转成列在我们编码中是经常遇到的我做一个小例子大家看一下 1 --创建一个表 2 create table PayPhoneMoney 3 ( 4 id int identity(1,1)...
1007 0
|
2月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
354 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。