使用动态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,如需转载请自行联系原作者
相关文章
|
15天前
|
SQL 数据库 索引
SQL索引失效原因分析与解决方案
SQL索引失效原因分析与解决方案
22 0
|
23天前
|
SQL 关系型数据库 MySQL
【MySQL】慢SQL分析流程
【4月更文挑战第1天】【MySQL】慢SQL分析流程
|
1月前
|
SQL Java 关系型数据库
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
18 0
|
1月前
|
SQL Java 关系型数据库
MyBatis中的9种常用动态sql标签精妙用法
MyBatis中的9种常用动态sql标签精妙用法
60 0
|
1月前
|
SQL druid Java
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
29 0
|
2月前
|
SQL XML Java
【JavaEE进阶】 MyBatis之动态SQL
【JavaEE进阶】 MyBatis之动态SQL
|
2月前
|
SQL 关系型数据库 MySQL
10个SQL中常用的分析技巧
10个SQL中常用的分析技巧
|
2月前
|
SQL 存储 关系型数据库
MySQL(终结篇二)- SQL 语句分析与优化
MySQL(终结篇二)- SQL 语句分析与优化
87 0
|
3月前
|
SQL 缓存 Java
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
64 0
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
|
3月前
|
SQL XML Java
【MyBatis】动态SQL
【MyBatis】动态SQL