主要应用case语句来解决行转列的问题

行转列问题主要分为两类

1)简单的行转列问题:

示例表:

id  sid           course  result

1   2005001 语文     80.0
2   2005001 数学     90.0
3   2005001 英语     80.0
4   2005002 语文     56.0
5   2005002 数学     69.0
6   2005002 英语     89.0

执行

select sid,语文=isnull(sum(case course when '语文' then result end),0),
   数学=isnull(sum(case course when '数学' then result end),0),
   英语=isnull(sum(case course when '英语' then result end),0)
   from result 
   group by sid
   order by sid

得出结果

sid           语文 数学 英语

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

2)较为复杂的行转列

表1:course

id name

1 语文
2 数学
3 英语

表2:result

id sid          course  result

1 2005001 语文      80.0
2 2005001 数学      90.0
3 2005001 英语      80.0
4 2005002 语文      56.0
5 2005002 数学      69.0
6 2005002 英语      89.0

declare @sql varchar(8000)
set @sql='select sid'
select @sql=@sql+','+course.name+'=isnull(sum(case course when '''+course.name+''' then result end),0)'
 from course order by id 
set @sql=@sql+' from result group by sid order by sid'
print @sql
exec(@sql)

得出结果

sid           语文 数学 英语

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

http://blog.csdn.net/tthxqttzln/archive/2007/02/02/1500825.aspx

=================================================================================================

1
2
3
4
5
6
7
8
9
10
11
12
13
create table t(bf_org_shop_ID varchar(10),
prod_ID varchar(10),
sales_price int,
sales_qty int)
 
 
 
insert into values ('单位1','aa',12,13)
insert into values ('单位1','bb',14,15)
insert into values ('单位2','aa',12,17)
insert into values ('单位2','bb',14,19)
insert into values ('单位3','aa',12,21)
insert into values ('单位3','bb',14,23)

执行

1
2
3
4
5
6
7
declare @sql varchar(4000)
set @sql = 'select [prod_ID],[sales_price]'
select @sql = @sql + ',sum(isnull(case [bf_org_shop_ID] when '''+[bf_org_shop_ID]+''' then [sales_qty] end,0)) as 
['+[bf_org_shop_ID]+']'
from (select distinct [bf_org_shop_ID] from [t]) as a
select @sql = @sql+' from [t] group by [prod_ID],[sales_price]'
exec(@sql)

http://zhidao.baidu.com/link?url=Hfz-VA92dCx73oPk-dC0O8OIYrbiy2-9TJwgwErip2bM3PfeImg_1xio16dbOeuzzLSeY-8QHmG-XT63yU7FGK

sql server 行转列解决方案的更多相关文章

  1. Sql Server 行转列

    --摘自百度 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (… ...

  2. SQL Server 行转列重温

    转载自http://www.cnblogs.com/kerrycode/ 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER ...

  3. sql server 行转列(转载)

    SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  4. sql server 行转列 Pivot UnPivot

    SQL Server中行列转换 Pivot UnPivot 本文转自:张志涛 原文地址: http://www.cnblogs.com/zhangzt/archive/2010/07/29/17878 ...

  5. 【转载】SQL Server行转列,列转行

    行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清 ...

  6. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...

  7. SQL Server 行转列,列转行

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...

  8. 做图表统计你需要掌握SQL Server 行转列和列转行

    说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...

  9. sql server行转列

    创建测试数据 学生表 Student create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarcha ...

随机推荐

  1. xmind的第九天笔记

  2. java导出excel报错:getOutputStream() has already been called for this response

    对于java导出excel报错的问题,查了很多都说是在使用完输出流以后调用以下两行代码即可 out.clear(); out = pageContext.pushBody(); 但这也许是页面上输出时 ...

  3. rsync异机备份

    参考http://www.cnblogs.com/itech/archive/2009/08/10/1542945.html 1.服务器 新建/etc/rsyncd.conf  ->新建/etc ...

  4. main函数的简介

    ////  main函数的简介.h//  IOS笔记////  Created by .//  Copyright © 2015年  All rights reserved.// //#import ...

  5. 安装初始化mysql后,默认几个库介绍

    背景介绍:  当我们安装初始化mysql后,默认建了几个数据库,那么这些数据库有什么作用呢?mysql> show databases;+--------------------+| Datab ...

  6. jquery datatables双击,获取行号。

    function dbClickDatatables(rows) { $("#@(Perfix)tbData tbody tr").dblclick(function(e){ de ...

  7. knockout+bootstrap+MVC 登录页实现

    一.环境概述 1.MVC4.0项目 2.bootstrap引入: 生产环境版本引入:在web\Content 文件夹中引入bootstrap-3.2.0-dist, 源码版本CSS引入:将bootst ...

  8. .Net 请求Web接口Post和Get方法

    #region web服务请求 get post static string DefaultUserAgent = "www.zhiweiworld.com"; public st ...

  9. ADF_Controller系列5_通过绑定TasksFlow创建Train

    2015-02-14 Created By BaoXinjian

  10. iOS中定时器的使用

    1. NSTimer 不是很精确 2.CADisplayLink 屏幕 3.通过GCD来实现定时间器 //定时循环执行事件 //dispatch_source_set_timer 方法值得一提的是最后 ...