T-SQL,动态聚合查询

动态

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)

时间: 2024-10-19 02:19:28

T-SQL,动态聚合查询的相关文章

使用动态SQL构造通用动态页面查询

由于动态SQL特有的灵活性,我们很容易的按照某种共性去构造通用和重用功能的代码,例如基于某个表的动态字段查询: 但凡事有利有弊:首先动态SQL语句无法在编译前期检查SQL是否正确,必须等到运行期才会发现问题:其次静态SQL是一次解析,多次执行,虽然动态SQL也可以使用绑定变量的方式,但是也会带来一些意想不到的性能问题,例如绑定变量在SQL要访问的表存在数据倾斜时会提供错误的执行计划:最后动态SQL语句可读性较差,比较难以维护. 下面我们就以比较经典的分页功能为例: CREATE OR REPLA

LINQ to SQL运行时动态构建查询条件

在进行数据查询时,经常碰到需要动态构建查询条件.使用LINQ实现这个需求可能会比以前拼接SQL语 句更麻烦一些.本文介绍了3种运行时动态构建查询条件的方法.本文中的例子最终实现的都是同一个功 能,从Northwind数据库Customers表中搜索出CompanyName列带有keywords中任意元素的项.keywords是 个字符串数组,该数组长度在编译时是不确定的.思路及方法说明写在代码注释中. 1.表达式树 1 public static IEnumerable<Customers>

jdbc 动态sql语句拼接 查询不出结果

问题描述 jdbc 动态sql语句拼接 查询不出结果 public List queryByCondition(String command String description) { // message列表 List messageList = new ArrayList(); try { // 加载驱动 Class.forName(""com.mysql.jdbc.Driver""); // 数据库的连接 Connection conn; conn = Dri

oracle数据库-oracle sql 动态查询问题----大神请进

问题描述 oracle sql 动态查询问题----大神请进 问题场景,有表1如下: 姓名 科目 王二 语文 王二 数学 张三 语文 得到如下检索结果: 姓名 科目1 科目2 王二 语文 数学 张三 语文 问题:若表1是动态的,再增加一条或多条记录,如:李四 英语 怎样才能得到: 姓名 科目1 科目2 科目3 王二 语文 数学 张三 语文 李四 ---- ---- 英语 可否通过查询语句实现?若不能,是否有其他手段实现? 解决方案 select name, WMSYS.WM_CONCAT(sub

web开发-动态sql实现模糊查询错误

问题描述 动态sql实现模糊查询错误 public List findByCondition(String readerTypeId, String barcode, String name, final int page, final int pageSize) throws DAOException { final List params = new ArrayList(); final String hql = createFindHQL(readerTypeId, barcode, na

MyBatis实践之动态SQL及关联查询_MsSql

序言 MyBatis,大家都知道,半自动的ORM框架,原来叫ibatis,后来好像是10年apache软件基金组织把它托管给了goole code,就重新命名了MyBatis,功能相对以前更强大了.它相对全自动的持久层框架Hibernate,更加灵活,更轻量级,这点我还是深有体会的. MyBatis的一个强大特性之一就是动态SQL能力了,能省去我们很多串联判断拼接SQL的痛苦,根据项目而定,在一定的场合下使用,能大大减少程序的代码量和复杂程度,不过还是不是过度太过复杂的使用,以免不利于后期的维护

MyBatis实践之动态SQL及关联查询

序言 MyBatis,大家都知道,半自动的ORM框架,原来叫ibatis,后来好像是10年apache软件基金组织把它托管给了goole code,就重新命名了MyBatis,功能相对以前更强大了.它相对全自动的持久层框架Hibernate,更加灵活,更轻量级,这点我还是深有体会的. MyBatis的一个强大特性之一就是动态SQL能力了,能省去我们很多串联判断拼接SQL的痛苦,根据项目而定,在一定的场合下使用,能大大减少程序的代码量和复杂程度,不过还是不是过度太过复杂的使用,以免不利于后期的维护

妙用SQL Server聚合函数和子查询迭代求和

先看看下面的表和其中的数据: t_product 图1 该表有两个字段:xh和price, 其中xh是主索引字段,现在要得到如下的查询结果: 图2 从上面的查询结果可以看出,totalprice字段值的规则是从第1条记录到当前记录的price之和.如第3条记录的totalprice字段的值是10 + 25 + 36 = 71. 现在要通过t_product表中的数据生成图2所示的查询结果.可能会有很多读者想到使用循环和游标,不过这种方式效率并不高,尤其在记录非常多的情况. 从图2的查询结果分析可

SQL Server 聚合函数算法优化技巧

原文:SQL Server 聚合函数算法优化技巧 Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用.   v1.写在前面 如果有对Sql server聚合函数不熟或者忘