• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

T-SQL,动态聚合查询

发布: 2007-7-02 11:08 | 作者: admin | 来源: | 查看: 8次 | 进入软件测试论坛讨论

领测软件测试网
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES      WHERE TABLE_NAME = @#AccountMessage@#)   DROP TABLE AccountMessageGO

CREATE TABLE AccountMessage(FFundCode VARCHAR(6) NOT NULL,FAccName VARCHAR(20) NOT NULL,FAccNum INT NOT NULL);

IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES      WHERE TABLE_NAME = @#AccountBalance@#)   DROP TABLE AccountBalanceGO

CREATE TABLE AccountBalance(FFundCode VARCHAR(6) NOT NULL,FAccNum INT NOT NULL,FDate DATETIME DEFAULT (getdate()) NOT NULL,FBal NUMERIC(10,2) NOT NULL);

INSERT INTO AccountMessage VALUES(@#000001@#,@#北京存款@#,1)INSERT INTO AccountMessage VALUES(@#000001@#,@#上海存款@#,2)INSERT INTO AccountMessage VALUES(@#000001@#,@#深圳存款@#,3)INSERT INTO AccountMessage VALUES(@#000002@#,@#北京存款@#,1)INSERT INTO AccountMessage VALUES(@#000002@#,@#上海存款@#,2)INSERT INTO AccountMessage VALUES(@#000002@#,@#天津存款@#,3)INSERT INTO AccountMessage VALUES(@#000003@#,@#上海存款@#,1)INSERT INTO AccountMessage VALUES(@#000003@#,@#福州存款@#,2)

INSERT INTO AccountBalance(FDate, FFundCode, FAccNum, FBal) VALUES (@#2004-07-28@#,@#000001@#,1,1000.00)INSERT INTO AccountBalance(FDate, FFundCode, FAccNum, FBal) VALUES (@#2004-07-28@#,@#000001@#,2,1000.00)INSERT INTO AccountBalance(FDate, FFundCode, FAccNum, FBal) VALUES (@#2004-07-28@#,@#000001@#,3,1120.00)INSERT INTO AccountBalance(FDate, FFundCode, FAccNum, FBal) VALUES (@#2004-07-28@#,@#000002@#,1,2000.00)INSERT INTO AccountBalance(FDate, FFundCode, FAccNum, FBal) VALUES (@#2004-07-28@#,@#000002@#,2,1000.00)INSERT INTO AccountBalance(FDate, FFundCode, FAccNum, FBal) VALUES (@#2004-07-28@#,@#000002@#,3,1000.00)INSERT INTO AccountBalance(FDate, FFundCode, FAccNum, FBal) VALUES (@#2004-07-28@#,@#000003@#,1,2000.00)INSERT INTO AccountBalance(FDate, FFundCode, FAccNum, FBal) VALUES (@#2004-07-28@#,@#000003@#,2,1000.00)go

两种不同的方法

declare @s nvarchar(4000)set @s=@#@#select @s=@s+@#,@#+quotename(FAccName) +@#=isnull(sum(case a.FAccName when @#+quotename(FAccName,@#@#@#@#) +@# then b.FBal end),0)@#from AccountMessage group by FAccNameexec(@#select 基金代码=a.FFundCode@#+@s+@#from AccountMessage a,AccountBalance bwhere a.FFundCode=b.FFundCode and a.FAccNum=b.FAccNumgroup by a.FFundCode@#)go

select * into #t from(select a.*,b.fbal from AccountMessage a join AccountBalance b on a.ffundcode=b.ffundcode and a.faccnum=b.faccnum)tDECLARE @SQL VARCHAR(8000) SET @SQL=@#SELECT ffundcode@# SELECT @SQL= @SQL+ @#,sum(CASE WHEN FAccName = @#@#@# + tt + @#@#@# THEN FBal else 0 END) [@# +tt+ @#]@# FROM (SELECT DISTINCT FAccName as tt FROM #t) A SET @SQL=@SQL+@# FROM #t group by ffundcode@# exec (@SQL)

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网