使用动态SQL语句实现Sbo的客户物料组销售二维分析

简介:
朋友希望我帮他完成在Sbo中实现按照不同的物料组和不同的客户之间的二维分析。
 
应该说实现方式还是多种的,最简单的实现方式就是使用动态化的存储过程的方式。研究了一下,实现的存储过程如下:
 
alter procedure up_TTLSaleInfo4CardAndItemGroup
 @sd smalldatetime, @ed smalldatetime
with Encryption
as
begin 
 declare @sql varchar(8000)
 select ItmsGrpCod, ItmsGrpNam, CardCode, sum(qty) qty, sum(amt) amt
 INTO #tmp
 FROM
  (
  select c.ItmsGrpCod, d.ItmsGrpNam, b.CardCode, sum(Quantity) qty, sum(LineTotal) amt
   FROM INV1 a 
   inner join OINV b on a.docEntry=b.docEntry
   inner join OITM c on a.ItemCode=c.ItemCode
   inner join OITB d on c.ItmsGrpCod=d.ItmsGrpCod
   WHERE b.docDate between IsNull(@sd, '2006-1-1') and IsNull(@ed, getdate())
   group by c.ItmsGrpCod, b.CardCode, d.ItmsGrpNam
  union all
  select c.ItmsGrpCod, d.ItmsGrpNam, b.CardCode, sum(Quantity) qty, sum(LineTotal) amt
   FROM RIN1 a 
   inner join ORIN b on a.docEntry=b.docEntry
   inner join OITM c on a.ItemCode=c.ItemCode
   inner join OITB d on c.ItmsGrpCod=d.ItmsGrpCod
   WHERE b.docDate between IsNull(@sd, '2006-1-1') and IsNull(@ed, getdate())
   group by c.ItmsGrpCod, b.CardCode, d.ItmsGrpNam
  ) t
 group by ItmsGrpCod, CardCode, ItmsGrpNam
 select @sql=isnull(@sql,'')+',['+cast(ItmsGrpNam  as nvarchar(10))+'(数量)]=sum(case ItmsGrpNam when '''+ ItmsGrpNam + ''' then qty else 0 end ),['+cast(ItmsGrpNam  as nvarchar(10))+'(金额)]=sum(case ItmsGrpNam when '''+ ItmsGrpNam + ''' then amt else 0 end )'
 from #tmp group by ItmsGrpNam
 select @sql = 'select a.CardCode 客户代码, b.CardName 客户名称' + @sql + ', sum(qty) 合计数量, sum(amt) 合计金额 from #tmp a inner join OCRD b on a.CardCode=b.CardCode group by a.CardCode, b.CardName'
-- print @sql
 exec ( @sql )
end
 
执行此存储过程的SQL Server语句如下: exec up_TTLSaleInfo4CardAndItemGroup '2008-6-1', '2008-6-2'
 
执行结果如下图所示,显然达到了预期目的。稍微做一下改变,就可以使用在Sbo的查询接口中。
点击看大图


本文转自foresun  51CTO博客,原文链接:http://blog.51cto.com/foresun/83639,如需转载请自行联系原作者
相关文章
|
3月前
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
5月前
|
前端开发 Java JSON
Struts 2携手AngularJS与React:探索企业级后端与现代前端框架的完美融合之道
【8月更文挑战第31天】随着Web应用复杂性的提升,前端技术日新月异。AngularJS和React作为主流前端框架,凭借强大的数据绑定和组件化能力,显著提升了开发动态及交互式Web应用的效率。同时,Struts 2 以其出色的性能和丰富的功能,成为众多Java开发者构建企业级应用的首选后端框架。本文探讨了如何将 Struts 2 与 AngularJS 和 React 整合,以充分发挥前后端各自优势,构建更强大、灵活的 Web 应用。
68 0
|
5月前
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
69 0
|
5月前
|
SQL 数据采集 算法
【电商数据分析利器】SQL实战项目大揭秘:手把手教你构建用户行为分析系统,从数据建模到精准营销的全方位指南!
【8月更文挑战第31天】随着电商行业的快速发展,用户行为分析的重要性日益凸显。本实战项目将指导你使用 SQL 构建电商平台用户行为分析系统,涵盖数据建模、采集、处理与分析等环节。文章详细介绍了数据库设计、测试数据插入及多种行为分析方法,如购买频次统计、商品销售排名、用户活跃时间段分析和留存率计算,帮助电商企业深入了解用户行为并优化业务策略。通过这些步骤,你将掌握利用 SQL 进行大数据分析的关键技术。
272 0
|
5月前
|
SQL 数据挖掘 BI
【超实用技巧】解锁SQL聚合函数的奥秘:从基础COUNT到高级多表分析,带你轻松玩转数据统计与挖掘的全过程!
【8月更文挑战第31天】SQL聚合函数是进行数据统计分析的强大工具,可轻松计算平均值、求和及查找极值等。本文通过具体示例,展示如何利用这些函数对`sales`表进行统计分析,包括使用`COUNT()`、`SUM()`、`AVG()`、`MIN()`、`MAX()`等函数,并结合`GROUP BY`和`HAVING`子句实现更复杂的数据挖掘需求。通过这些实践,你将学会如何高效地应用SQL聚合函数解决实际问题。
71 0
|
5月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
|
6月前
|
SQL Java 数据库连接
mybatis动态SQL常用语法总结
MyBatis 使用 OGNL 表达式语言处理动态SQL,如 `if` 标签进行条件判断,`choose`、`when`、`otherwise` 实现多条件选择,`where`、`set` 管理SQL关键字,`trim` 提供通用修剪功能,`foreach` 遍历集合数据。`sql` 和 `include` 用于代码重用,`selectKey` 处理插入后的返回值。参数传递支持匿名、具名、列表、Map、Java Bean和JSON方式。注意SQL转义及使用合适的jdbcType映射Java类型。
118 7
|
6月前
|
SQL 存储 大数据
SQL中DISTINCT关键字的使用与性能影响分析
SQL中DISTINCT关键字的使用与性能影响分析
|
7月前
|
SQL 缓存 Java
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
|
7月前
|
SQL Java 数据库连接
MyBatis动态SQL
MyBatis动态SQL
73 0