`
三里小龙
  • 浏览: 88172 次
  • 性别: Icon_minigender_1
  • 来自: 孝感
社区版块
存档分类
最新评论

SQL2000行列倒置的实战例子脚本

阅读更多

use master
go
create database upbs_test
go
use upbs_test
go
create table tb_goods
(
 id int identity(1,1) primary key,
 oid varchar(20),
 cnt  int,
 price money,
 tp varchar(20)
)
go

insert into tb_goods values('G1',2,5,'Ta')
insert into tb_goods values('G1',2,5,'Tb')
insert into tb_goods values('G1',1,7,'Tc')
insert into tb_goods values('G2',2,2,'Ta')
insert into tb_goods values('G2',3,8,'Tb')
insert into tb_goods values('G2',1,6,'Tc')
insert into tb_goods values('G2',1,9,'Ta')
insert into tb_goods values('G2',3,1,'Tb')
insert into tb_goods values('G3',1,9,'Tc')
insert into tb_goods values('G3',6,4,'Ta')
insert into tb_goods values('G5',8,3,'Tb')
insert into tb_goods values('G5',2,1,'Tc')
insert into tb_goods values('G5',9,6,'Ta')
insert into tb_goods values('G6',3,3,'Tb')
insert into tb_goods values('G6',2,5,'Tc')

insert into tb_goods values('G1',8,3,'Ta')
insert into tb_goods values('G2',2,1,'Tb')
insert into tb_goods values('G3',9,6,'Tc')
insert into tb_goods values('G4',3,3,'Ta')
insert into tb_goods values('G5',2,5,'Tb')
insert into tb_goods values('G6',2,5,'Tc')

insert into tb_goods values('G7',3,3,'Ta')
insert into tb_goods values('G7',2,5,'Tb')

insert into tb_goods values('G8',3,3,'Tc')

----------------------------------------------------------------------------------------------------------------------------------

 ---first step
 select oid,
  (case tp when 'ta' then isnull(cp, 0) end) as ta,
  (case tp when 'tb' then isnull(cp, 0) end) as tb,
  (case tp when 'tc' then isnull(cp, 0) end) as tc
 from viw_g

 

 ---second step
 select oid,
  sum(ta) as ta,
  sum(tb) as tb,
  sum(tc) as tc
 from
  (
   select oid,
   (case tp when 'ta' then isnull(cp, 0) end) as ta,
   (case tp when 'tb' then isnull(cp, 0) end) as tb,
   (case tp when 'tc' then isnull(cp, 0) end) as tc
   from (select oid,sum(cnt*price) cp,tp from tb_goods group by oid,tp) as s
  ) as b
 group by oid

-----------------------------------------------------------------------------------------------------------

利用游标动态拼接SQL语句

declare myCur cursor for select distinct tp from tb_goods
declare 
 @tp varchar(20),
 @sum varchar(300),
 @case varchar(500),
 @sql nvarchar(1000)
set @sum = ''
set @case = ''
set @sql = ''
open myCur
 fetch next from myCur into @tp
while @@fetch_status =0
begin
 print @tp
 set @sum = @sum + 'sum(' + @tp + ') as '  + @tp +','
 set @case = @case + '(case tp when '''  + @tp + ''' then isnull(cp,0) end) as ' + @tp +','
 fetch next from myCur into @tp
end
close myCur
deallocate myCur

if right(@case,1) = ','
 set @case = stuff(@case, len(@case), 1, ' from (select oid,sum(cnt*price) cp,tp from tb_goods group by oid,tp) as s')

if right(@sum,1) = ','
 set @sum = stuff(@sum,len(@sum),1,'')

set @sql = 'select oid, ' + @sum + ' from ( select oid, ' + @case + ') as b group by oid'

execute sp_executesql @sql

【execute sp_executesql @sql-->也可写成 exec(@sql) 】

可以参考一下http://weblogs.asp.net/salimfayad/archive/2008/01/30/rows-to-columns.aspx

 

0
1
分享到:
评论

相关推荐

    java 执行sql脚本 例子

    java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行...

    sql server 行列转换

    本文将通过一个具体的SQL Server示例来深入探讨如何实现行列转换。 #### 一、创建视图(Step 1) 首先,我们需要创建一个视图,该视图将两个表`TableA`和`TableB`的数据合并在一起。这一步骤是后续行列转换的基础...

    SQL2000如何生成SQL脚本

    在SQL Server 2000中,生成SQL脚本是一个重要的数据库管理任务,它可以帮助我们备份数据库结构,包括表、视图、存储过程、触发器等,也可以用于迁移数据到其他环境或者创建测试数据库。下面将详细介绍如何在SQL ...

    SQL脚本批量执行,方便大量的SQL脚本执行。

    当面临大量SQL脚本需要执行时,手动逐个操作显然效率低下且容易出错。这时,批量执行SQL脚本的能力就显得尤为重要。本文将详细探讨如何进行SQL脚本的批处理执行,并提供相关策略和工具。 首先,了解批处理的基本...

    sql server 导入超大SQL脚本文件

    SQL Server 导入超大 SQL 脚本文件 SQL Server 是一种关系型数据库管理系统,广泛应用于各种行业。然而,在实际应用中,我们经常会遇到导入超大 SQL 脚本文件的问题。本文将介绍如何使用 osql 工具来导入超大 SQL ...

    SQLServer导出带数据的脚本

    SQL Server 导出带数据的脚本 SQL Server 是一个功能强大的关系数据库管理系统,它提供了多种方式来导出数据库结构和数据。今天,我们将探讨如何使用 SQL Server Management Studio (SSMS) 导出带数据的脚本。 一...

    sql server 2000经典脚本大全

    《SQL Server 2000经典脚本大全》是一份宝贵的学习资源,它包含了大量针对SQL Server 2000数据库管理系统编写的SQL脚本。这些脚本涵盖了数据库管理、查询优化、性能调整、安全控制等多个关键领域,是提升SQL Server ...

    sqlserver表数据生成insertsql脚本(导出成insertsql脚本).pdf

    SQL Server表数据生成INSERT SQL脚本 SQL Server是一种强大的关系数据库管理系统,提供了多种方式来生成INSERT SQL脚本,以便将数据导出到其他数据库或系统中。在本文中,我们将介绍如何使用SQL Server 2008中文版...

    SQL脚本批量执行脚本

    此BAT脚本可以帮助开发人员将某文件夹下所有SQL脚本按文件名依次在指定数据库中批量执行。并且生成日志文件,可查看执行过的所有脚本名称和错误信息。 注意: (1) 使用前需确保已将sqlcmd加入到系统环境变量中。 (2...

    Mysql数据库SQL实战

    数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战...

    SQL小工具 批量执行SQL脚本文件(WinForm开发 .Net 2.0)

    该工具主要支持两大功能: 1、批量执行SQL脚本文件; 2、文件拷贝操作。 其中,App.config为工具配置文件, ...工具默认为Sql2000服务器,数据库用户名为sa,密码为空。 经验不足,望您能够指出改进的地方。

    SQL2005导出SQL2000脚本的总结

    ### SQL2005导出至SQL2000脚本的关键知识点 #### 一、背景与需求 在IT行业中,经常会遇到不同版本之间数据库迁移的需求。随着技术的发展,数据库管理系统(DBMS)也在不断更新迭代,从早期的SQL Server 2000到后来...

    SQL脚本SQL脚本SQL脚本

    SQL脚本SQL脚本SQL脚本SQL脚本SQL脚本

    linux 连接 sql 2000/2005 C语言 例子

    使用linux 连接 sql 2000/2005 数据库服务器

    SqlServer 生成数据库字典SQL脚本

    SqlServer 生成数据库字典 SQL脚本,本人自己编写,自己用,非常方便的,源码可以根据需要修改

    MySQL存储过程实战SQL脚本

    内容概述:通过MySQL存储过程实战的例子,学会使用MySQL存储过程。包含以下内容: 创建无参存储过程、有参存储过程、IF-ELSE存储过程、WHILE循环存储过程、CASE-WHEN条件控制存储过程、REPEAT UNTIL循环存储过程、...

    SQLServer脚本批量执行工具

    SQLServer脚本批量执行工具是一种高效管理SQL Server数据库的实用程序,它允许用户一次性执行多个SQL脚本,显著提高了数据库管理员的工作效率。该工具的主要功能包括脚本的顺序执行、执行结果的记录以及脚本的可视化...

    sql server脚本导出器轻松导出SQL脚本 sql server 2000 备份工具

    SQL Server脚本导出器是数据库管理员在管理SQL Server 2000时的重要工具,它使得数据库的备份和迁移工作变得更为简便。这个工具的主要功能是生成数据库对象的SQL脚本,包括表、视图、存储过程、触发器、索引等,这样...

    全球国家城市SQL脚本

    全球国家城市SQL脚本,最多支持4级,按照国家、省/州、城市、地区。脚本是从mysql数据库中导出。

    批量执行SQL脚本

    当我们面对大量的SQL脚本,逐个手动执行不仅效率低下,而且容易出错。批量执行SQL脚本的解决方案应运而生,它能够有效地自动化这个过程,提高工作效率,确保数据操作的一致性和准确性。下面,我们将深入探讨批量执行...

Global site tag (gtag.js) - Google Analytics