T-SQL,动态聚合查询
2008-04-26 14:38
260 查看
IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLES WHERETABLE_NAME='AccountMessage') DROPTABLEAccountMessageGO
CREATETABLEAccountMessage(FFundCodeVARCHAR(6)NOTNULL,FAccNameVARCHAR(20)NOTNULL,FAccNumINTNOTNULL);
IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLES WHERETABLE_NAME='AccountBalance') DROPTABLEAccountBalanceGO
CREATETABLEAccountBalance(FFundCodeVARCHAR(6)NOTNULL,FAccNumINTNOTNULL,FDateDATETIMEDEFAULT(getdate())NOTNULL,FBalNUMERIC(10,2)NOTNULL);
INSERTINTOAccountMessageVALUES('000001','北京存款',1)INSERTINTOAccountMessageVALUES('000001','上海存款',2)INSERTINTOAccountMessageVALUES('000001','深圳存款',3)INSERTINTOAccountMessageVALUES('000002','北京存款',1)INSERTINTOAccountMessageVALUES('000002','上海存款',2)INSERTINTOAccountMessageVALUES('000002','天津存款',3)INSERTINTOAccountMessageVALUES('000003','上海存款',1)INSERTINTOAccountMessageVALUES('000003','福州存款',2)
INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000001',1,1000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000001',2,1000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000001',3,1120.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000002',1,2000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000002',2,1000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000002',3,1000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000003',1,2000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000003',2,1000.00)go
两种不同的方法
declare@snvarchar(4000)set@s=''select@s=@s+','+quotename(FAccName) +'=isnull(sum(casea.FAccNamewhen'+quotename(FAccName,'''') +'thenb.FBalend),0)'fromAccountMessagegroupbyFAccNameexec('select基金代码=a.FFundCode'+@s+'fromAccountMessagea,AccountBalancebwherea.FFundCode=b.FFundCodeanda.FAccNum=b.FAccNumgroupbya.FFundCode')go
select*into#tfrom(selecta.*,b.fbalfromAccountMessageajoinAccountBalancebona.ffundcode=b.ffundcodeanda.faccnum=b.faccnum)tDECLARE@SQLVARCHAR(8000)SET@SQL='SELECTffundcode'SELECT@SQL=@SQL+',sum(CASEWHENFAccName='''+tt+'''THENFBalelse0END)['+tt+']'FROM(SELECTDISTINCTFAccNameasttFROM#t)ASET@SQL=@SQL+'FROM#tgroupbyffundcode'exec(@SQL)
CREATETABLEAccountMessage(FFundCodeVARCHAR(6)NOTNULL,FAccNameVARCHAR(20)NOTNULL,FAccNumINTNOTNULL);
IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLES WHERETABLE_NAME='AccountBalance') DROPTABLEAccountBalanceGO
CREATETABLEAccountBalance(FFundCodeVARCHAR(6)NOTNULL,FAccNumINTNOTNULL,FDateDATETIMEDEFAULT(getdate())NOTNULL,FBalNUMERIC(10,2)NOTNULL);
INSERTINTOAccountMessageVALUES('000001','北京存款',1)INSERTINTOAccountMessageVALUES('000001','上海存款',2)INSERTINTOAccountMessageVALUES('000001','深圳存款',3)INSERTINTOAccountMessageVALUES('000002','北京存款',1)INSERTINTOAccountMessageVALUES('000002','上海存款',2)INSERTINTOAccountMessageVALUES('000002','天津存款',3)INSERTINTOAccountMessageVALUES('000003','上海存款',1)INSERTINTOAccountMessageVALUES('000003','福州存款',2)
INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000001',1,1000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000001',2,1000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000001',3,1120.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000002',1,2000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000002',2,1000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000002',3,1000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000003',1,2000.00)INSERTINTOAccountBalance(FDate,FFundCode,FAccNum,FBal)VALUES('2004-07-28','000003',2,1000.00)go
两种不同的方法
declare@snvarchar(4000)set@s=''select@s=@s+','+quotename(FAccName) +'=isnull(sum(casea.FAccNamewhen'+quotename(FAccName,'''') +'thenb.FBalend),0)'fromAccountMessagegroupbyFAccNameexec('select基金代码=a.FFundCode'+@s+'fromAccountMessagea,AccountBalancebwherea.FFundCode=b.FFundCodeanda.FAccNum=b.FAccNumgroupbya.FFundCode')go
select*into#tfrom(selecta.*,b.fbalfromAccountMessageajoinAccountBalancebona.ffundcode=b.ffundcodeanda.faccnum=b.faccnum)tDECLARE@SQLVARCHAR(8000)SET@SQL='SELECTffundcode'SELECT@SQL=@SQL+',sum(CASEWHENFAccName='''+tt+'''THENFBalelse0END)['+tt+']'FROM(SELECTDISTINCTFAccNameasttFROM#t)ASET@SQL=@SQL+'FROM#tgroupbyffundcode'exec(@SQL)
相关文章推荐
- T-SQL,动态聚合查询
- 动态SQL的执行,注:exec sp_executesql 其实可以实现参数查询和输出参数的
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询
- MyBatis入门07--实现sql动态模糊查询
- XsqlFilterResult----动态生成sql语句的类,过滤一些为空的查询条件
- 07_动态SQL与模糊查询
- T-SQL动态查询(4)——动态SQL
- 六、Mybatis动态SQL和模糊查询
- The first inside of T-SQL 动态查询
- SQL数据查询动态
- 动态查询,动态生成cursor或者动态执行SQL的DML操作
- MyBatis笔记07 - 动态SQL与模糊查询
- LINQ to SQL 运行时动态构建查询条件
- 简单搞一下 Oracle 存储过程动态SQL之获取查询总数!
- 利用临时表、REF游标、动态SQL实现分页查询
- ibatis动态sql配置(in实例,模糊查询等)
- linq to sql的多条件动态查询
- 动态SQL查询计划的几个问题
- 动态SQL与模糊查询
- hibernate根据条件动态组装sql/hql语句(仿ibatis动态查询语句功