用聚合函数配合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 动态行转列的更多相关文章

  1. SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...

  2. SQL Server 动态行转列(轉載)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段; 方法二:使用拼接SQL, ...

  3. 代码实现SQL Server动态行转列,不用存储过程

    分两步查询,第一步查询出动态列,第二步使用PIVOT函数. 代码: List<DataTable> dataTableList = new List<DataTable>(); ...

  4. 转:SQL Server 动态行转列

    http://www.cnblogs.com/gaizai/p/3753296.html http://www.cnblogs.com/maanshancss/archive/2013/03/13/2 ...

  5. 老生常谈之SQL Server (行转列,列转行)

    Open the first article 在本文章中主要介绍以下内容: 1.静态行转列 2.静态列转行 3.动态行转列 4.动态列转行 1.静态行转列 --静态的行转列 --新建一个科目成绩表 - ...

  6. SQL Server pivot 行转列遇到的问题

    前段时间开发系统时,有个功能是动态加载列,于是就使用了SQL Server自带的PIVOT函数进行行转列,开始用的非常溜,效果非常好.但是提交测试后问题来了,测试添加的列名中包含空格,然后就杯具了,功 ...

  7. SQL SERVER特殊行转列案列一则

    今天有个同事找我,他说他有个需求,需要进行行转列,但是又跟一般的行转列有些区别,具体需求如下所说,需要将表1的数据转换为表2的显示格式. 我想了一下,给出了一个解决方法,具体如下所示(先给出测试数据) ...

  8. sql server 2005+ 行转列

    )) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') go , , '') from tb group by id

  9. sql server数据库行转列及巧用case when、和row_number用法例子

    select 身份证号码, MAX(t.单位编号) 单位编号, MAX(t.姓名) 姓名, MAX(case when t.rows=1 then convert(varchar(max),疾病名称) ...

随机推荐

  1. 引入math模块中的log()方法,导致"TypeError: return arrays must be of ArrayType",什么原因?

    from math import log from numpy import *import operator ............ re = log(pro,2) ............ Ty ...

  2. dubbo-monitor图标功能不显示

    原因有3: 1.需要创建目录 2.需要在consumer的配置文件中增加如下配置,使用zk为注册中心 <!-- 监控中心,需要配置以后dubbo-monitor才能生效 -->    &l ...

  3. android常用调试工具fiddle、wireshark和android studio的配置

    Fiddle配置android代理 在wifi的同一个局域网环境的windows主机中安装fiddler,并且启动,如本次192.168.3.14 在android手机端配置代理为该主机 还有一种方式 ...

  4. Ubuntu 14.04下搭建 Android 开发环境(1) -JDK安装

    1.下载最新的jdk安装,地址:http://www.oracle.com/technetwork/java/javase/downloads/ 2.解压jdk-8u20-linux-x64.gz,我 ...

  5. c#接口容易被忽视的问题

    今天在看"并发集合"的时候,接口IProducerConsumerCollection<T> 有一个方法是TryAdd(),表示"试图"去添加,然后 ...

  6. ConCurrent in Practice小记 (2)

    Java-ConCurrent2.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0 ...

  7. react-jsx

    本文同步至微信公众号http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=402252760&idx=1&sn=6952c4 ...

  8. win8.1 64位安装DEV C++

    1.首先下载64位版本的DEV C++ http://sourceforge.net/projects/orwelldevcpp/files/Setup%20Releases/ 2.采取默认安装即可, ...

  9. sqllite

    public static void tt()        {            int ID = 0; while(true)            {                stri ...

  10. qt小问题

    QT如何实现不点击鼠标就能触发 mouseMoveEvent(QMouseEvent *e):setMouseTracking(true) QTableView如何实现单击事件:不需要重写单击事件,而 ...