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),疾病名称) ...
随机推荐
- C语言隐形密码输入
今天费了老大的劲,终于做出来了!虽然简单,但也是自己的心血,分享一下! #include<stdio.h> #include<conio.h> int main(){ char ...
- 【zZ】OpenCV HOGDescriptor 参数图解
http://blog.csdn.net/raodotcong/article/details/6239431
- nginx的反向代理和负载均衡的一个总结
之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...
- iOS9中的App Transport Security
问题:webView加载网页加载不出来 原因:苹果在iOS9 sdk中加入了App Transport Security限制(iOS9以前的iOS sdk默认关闭ATS),默认强制使用https,并且 ...
- Linux守护进程
什么是守护进程? 守护进程是生存期长的一种进程,它们常常在系统引导装入时启动,仅在系统关闭时在终止.它们没有控制终端并且在后台运行.Linux 系统中有很多守护进程用以执行系统的日常事物,而且服务器程 ...
- ios 判断相册文件图片大小的方法
ALAssetsLibrary* alLibrary = [[ALAssetsLibrary alloc] init]; [alLibrary assetForURL:[info objectForK ...
- delphi中midas是什么
Delphi中MIDAS到底是什么呢?和他相关组件是什么呢? MIDAS(Multitiered Distributed Application Services)多层分布式应用服务. Del ...
- 如何捕获access violation异常
文章目录 access violation的由来 access violation的实例 Win32 exception SEH异常与C++标准异常 捕获方法 1.access violation的由 ...
- ajax回调打开新窗体防止浏览器拦截有效方法
ajax回调打开新窗体防止浏览器拦截,就这么做! 问题剖析: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function click_fun(){ window ...
- scala变量
#声明与定义(赋值) val 常量声明 val x:T val x:T=e (x:名字,T:类型,e:值) var 变量声明 var x:T var x:T=e #类型省略(默认类型) v ...