SQL server 动态行转列
用聚合函数配合CASE语句实现行转列功能:
现在分享一下具体实现代码:
转换前效果:
PlanName | PlanType | PlanLimit |
计划1 | 计划类型1 | RMB 1,000,000 |
计划1 | 计划类型2 | RMB 1,000,000 |
计划1 | 计划类型3 | RMB 1,000,000 |
计划2 | 计划类型1 | RMB 1,000,000 |
计划2 | 计划类型2 | RMB 1,000,000 |
计划2 | 计划类型3 | RMB 1,000,000 |
计划3 | 计划类型1 | RMB 1,000,000 |
计划3 | 计划类型2 | RMB 1,000,000 |
计划3 | 计划类型3 | RMB 1,000,000 |
1、静态实现行转列
with main as
(
select '计划1' as PlanName,'计划类型1' as PlanType,'RMB 1,000,000' as PlanLimit
union all
select '计划1' as PlanName,'计划类型2' as PlanType,'RMB 1,000,000' as PlanLimit
union all
select '计划1' as PlanName,'计划类型3' as PlanType,'RMB 1,000,000' as PlanLimit
union all
select '计划2' as PlanName,'计划类型1' as PlanType,'RMB 1,000,000' as PlanLimit
union all
select '计划2' as PlanName,'计划类型2' as PlanType,'RMB 1,000,000' as PlanLimit
union all
select '计划2' as PlanName,'计划类型3' as PlanType,'RMB 1,000,000' as PlanLimit
union all
select '计划3' as PlanName,'计划类型1' as PlanType,'RMB 1,000,000' as PlanLimit
union all
select '计划3' as PlanName,'计划类型2' as PlanType,'RMB 1,000,000' as PlanLimit
union all
select '计划3' as PlanName,'计划类型3' as PlanType,'RMB 1,000,000' as PlanLimit
)
select PlanType as [计划]
,'计划1'=max(case PlanName when '计划1' then PlanLimit else null end)
,'计划2'=max(case PlanName when '计划2' then PlanLimit else null end)
,'计划3'=max(case PlanName when '计划3' then PlanLimit else null end)
from main
where =
group by PlanType
2、动态实现行转列
-- =============================================
-- Author: <Anne>
-- Create date: <//>
-- Description: <查询SP_AnneTest表的数据>
-- =============================================
CREATE PROCEDURE [dbo].[SP_AnneTest]
(
)
AS
declare @sql varchar()
BEGIN
set @sql='' select @sql=@sql+','+''''+[PlanName]+''''+'=max(case PlanName when '''+[PlanName]+''' then PlanLimit else null end)'
from main
where =
group by PlanType
set @sql='select PlanType as [''计划'']'+@sql+'
from main
where =
group by PlanType' print @sql
exec(@sql) END
GO
实现效果:
计划 | 计划1 | 计划2 | 计划3 |
计划类型1 | RMB 1,000,000 | RMB 1,000,000 | RMB 1,000,000 |
计划类型2 | RMB 1,000,000 | RMB 1,000,000 | RMB 1,000,000 |
计划类型3 | RMB 1,000,000 | RMB 1,000,000 | RMB 1,000,000 |
SQL server 动态行转列的更多相关文章
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- SQL Server 动态行转列(轉載)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段; 方法二:使用拼接SQL, ...
- 代码实现SQL Server动态行转列,不用存储过程
分两步查询,第一步查询出动态列,第二步使用PIVOT函数. 代码: List<DataTable> dataTableList = new List<DataTable>(); ...
- 转:SQL Server 动态行转列
http://www.cnblogs.com/gaizai/p/3753296.html http://www.cnblogs.com/maanshancss/archive/2013/03/13/2 ...
- 老生常谈之SQL Server (行转列,列转行)
Open the first article 在本文章中主要介绍以下内容: 1.静态行转列 2.静态列转行 3.动态行转列 4.动态列转行 1.静态行转列 --静态的行转列 --新建一个科目成绩表 - ...
- SQL Server pivot 行转列遇到的问题
前段时间开发系统时,有个功能是动态加载列,于是就使用了SQL Server自带的PIVOT函数进行行转列,开始用的非常溜,效果非常好.但是提交测试后问题来了,测试添加的列名中包含空格,然后就杯具了,功 ...
- SQL SERVER特殊行转列案列一则
今天有个同事找我,他说他有个需求,需要进行行转列,但是又跟一般的行转列有些区别,具体需求如下所说,需要将表1的数据转换为表2的显示格式. 我想了一下,给出了一个解决方法,具体如下所示(先给出测试数据) ...
- sql server 2005+ 行转列
)) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') go , , '') from tb group by id
- sql server数据库行转列及巧用case when、和row_number用法例子
select 身份证号码, MAX(t.单位编号) 单位编号, MAX(t.姓名) 姓名, MAX(case when t.rows=1 then convert(varchar(max),疾病名称) ...
随机推荐
- Set,List,Map,Vector,ArrayList的区别(转)
JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtab ...
- python开发 Day1 python基础
编程语言主要从以下几个角度为进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下. 编译和解释的区别是什么? 编译器是把源程序的每一条 ...
- PHP 7 的新特性
PHP7是最新出来的一个新的PHP的一个版本,而且新增了一些新的版本特性,下面我们来介绍一下: 1.速度上比HHVM会快一些,大概是PHP5版本的9倍左右,下面是做的一个实验: <?php $a ...
- 100 Door Puzzle
问题重述: There are 100 doors in a long hallway. They are all closed. The first time you walk by each do ...
- poj3461 Oulipo(KMP模板)
Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17795 Accepted: 7160 Descripti ...
- Java和.NET使用DES对称加密的区别
Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Ja ...
- Java基础之OOP
1. 类(类型)于对象 (1)面向过程的开发于面向对象开发的区别: 面向过程更重视流程化以及功能的开发,简单点来讲,就是按照固定的模式一步步按部就班的进行,最终达成一个功能的实现.这种模式叫做面向过程 ...
- 笔记002:javascript简介
1. HTML服务于内容 CSS服务于表现 Javascript服务于行为(一切东西的粘合剂) 2.javascript能运行多种宿主环境中(Web浏览器最普遍) 3.历史 1995 Netscape ...
- QuickHit快速击键小程序 --S2.4.5
我们现在要做一个项目 一个小小的程序 叫做快速击键 很明了的目的 就是在规定时间内,每次出现一组字母的组合,这个字母只能在DFJK中生成 然后输入相应的文字,按回车 自动判断输入的是否正确 在规定时间 ...
- thinkphp 数据访问
<?php namespace Admin\Controller; use Think\Controller; class MainController extends Controller { ...