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
分享到:
相关推荐
sql server 行列转换例子,两步搞掂。
java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行sql脚本 例子java 执行...
在SQL Server 2000中,生成SQL脚本是一个重要的数据库管理任务,它可以帮助我们备份数据库结构,包括表、视图、存储过程、触发器等,也可以用于迁移数据到其他环境或者创建测试数据库。下面将详细介绍如何在SQL ...
SQL脚本SQL脚本SQL脚本SQL脚本SQL脚本
本文将详细解释如何为SQL Server 2000的数据生成脚本,以及这个过程中的关键知识点。 首先,生成数据脚本的主要目的是为了备份数据、初始化新的数据库环境或在不同服务器间迁移数据。在SQL Server 2000中,这可以...
SQL Server 导入超大 SQL 脚本文件 SQL Server 是一种关系型数据库管理系统,广泛应用于各种行业。然而,在实际应用中,我们经常会遇到导入超大 SQL 脚本文件的问题。本文将介绍如何使用 osql 工具来导入超大 SQL ...
防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL注入脚本防SQL...
《SQL Server 2000经典脚本大全》是一份宝贵的学习资源,它包含了大量针对SQL Server 2000数据库管理系统编写的SQL脚本。这些脚本涵盖了数据库管理、查询优化、性能调整、安全控制等多个关键领域,是提升SQL Server ...
SQL Server 2000和2005版本默认的脚本生成工具虽然能够生成数据库结构的DDL(Data Definition Language)脚本,但并不包括表内的数据,这无疑增加了数据库管理员的工作负担。为了克服这个限制,出现了专门的工具或...
SQL2000 和 SQL2005 下 行列转换 示例 - freeliver54 - 博客园.pdf
此BAT脚本可以帮助开发人员将某文件夹下所有SQL脚本按文件名依次在指定数据库中批量执行。并且生成日志文件,可查看执行过的所有脚本名称和错误信息。 注意: (1) 使用前需确保已将sqlcmd加入到系统环境变量中。 (2...
在处理SQL SERVER数据库时,有时我们需要在C#程序中执行SQL脚本来完成数据的增删改查、数据库结构的修改等任务。本篇将详细介绍如何在C#中执行SQL脚本,以及相关的知识点。 1. **ADO.NET基础**: ADO.NET是.NET ...
数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战数据库SQL实战...
这里我们将详细探讨如何使用SQL Server自带的`sqlcmd`工具以及如何创建一个自定义的备份脚本来实现这一功能。 首先,`sqlcmd`是一个命令行工具,允许用户在命令行界面执行Transact-SQL语句、系统存储过程和脚本。在...
Sql脚本对比工具是一种高效实用的软件,专为数据库管理员和开发人员设计,用于比较和同步SQL脚本。这类工具通常具有用户友好的界面,能够方便地处理多个SQL语句的差异,帮助用户快速定位并解决数据库之间的不一致...
该工具主要支持两大功能: 1、批量执行SQL脚本文件; 2、文件拷贝操作。 其中,App.config为工具配置文件, ...工具默认为Sql2000服务器,数据库用户名为sa,密码为空。 经验不足,望您能够指出改进的地方。
SQL Server表数据生成INSERT SQL脚本 SQL Server是一种强大的关系数据库管理系统,提供了多种方式来生成INSERT SQL脚本,以便将数据导出到其他数据库或系统中。在本文中,我们将介绍如何使用SQL Server 2008中文版...
使用linux 连接 sql 2000/2005 数据库服务器
SQL Server2000游标例子 SQL Server2000游标例子
介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...