sql语句交叉报表实现

原创 2007年09月15日 11:36:00

select isnull(aa.ProductSortCode,'')+'`'+ isnull(aa.ProductCode,'') KeyEx
     ,aa.*,bb.TheName ProductName,bb.ConfigName,ProductSortName,cc.TheName ClientName
into #crosstab
from
(
select a.ProductCode,a.ProductSortCode,b.ClientCode
     ,Sum(a.Number) Number,Sum(a.SaleMoney) SaleMoney,Sum(a.TotalMoney) TotalMoney
from tbSaleOutItem a
Left Outer Join tbSaleOut b on a.BillNo = b.BillNo
Group by a.ProductCode,a.ProductSortCode,b.ClientCode
) aa
Left Outer Join vDatumProduct     bb on aa.ProductCode = bb.TheCode and aa.ProductSortCode=bb.ProductSort
Left Outer Join vDatumAllCustomer cc on aa.ClientCode = cc.TheCode
order by aa.ClientCode
--存储过程:
--1.用sql语句生成需要排序的交叉报表crosstab(a,b,c)需要b(门店)变为行显示,a(商品),c(数量)


--2.例如字段A要交叉显示,注意要对TempCross(b0排序,创建游标,释放游标
declare
   @AFiled varchar(50),--分组显示的名称
         --交叉表的字段
   @BFiled varchar(10),--Tempcross 构成交叉表的字段
   @BFiledName varchar(10),-----仓库名称
   @TempBField varchar(10),--Tempcross 构成交叉表的字段

   @CFiled varchar(10),--分组统计的数据

   @sql varchar(8000) --构成sql语句

declare currow cursor for
select ClientCode,ClientName from #crosstab
open currow
---初始化分组的名称
set @AFiled='ProductName,ProductSortName'
--初始化要求的字段
set @CFiled='Number'
set @sql = 'select '+@AFiled --得到A字段信息

fetch next from currow into @BFiled,@BFiledName
set @TempBField=''
while @@fetch_status=0
begin
     if @BFiled<>@TempBField
     begin
         select @sql = @sql +', sum(case ClientCode when ''' + @BFiled + ''' then '+@CFiled+' else 0 end) as ''' + @BFiledName+'`'+@CFiled + ''''
     end
set @TempBField=@BFiled 
fetch next from currow into @BFiled,@BFiledName
end
set @sql=@Sql+'from #crosstab group by '+@AFiled
print @sql
--3.执行显示结果
exec (@sql)


--4.释放游标
close currow
deallocate currow
--释放临时表
drop table #crosstab 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mysql 按日、周、月、年统计sql语句整理,实现报表统计可视化

最近在做报表统计,前端可视化插件用的是Echarts,个人认为是目前免费插件里的翘楚http://echarts.baidu.com/demo.html#pie-doughnut例子演示现在重点如何把...

SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)

SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN) 1.a. 并集UNION SELECT column1, column2 F...

SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)

1.a. 并集UNIONSELECT column1, column2 FROM table1UNIONSELECT column1, column2 FROM table2b. 交集JOINSELE...

SQL语句中的左连接、右连接、交叉连接、全外连接

两个表: A(id,name) 数据:(1,张三)(2,李四)(3,王五) B(id,name) 数据:(1,学生)(2,老师)(4,校长) 左连接结果: select A.*,B.* from A...

SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)

1. a. 并集UNION SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2 b. 交集J...

SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)

1.a. 并集UNIONSELECT column1, column2 FROM table1UNIONSELECT column1, column2 FROM table2b. 交集JOINSELE...

SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)

1. a. 并集UNION SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2 b...

SQL语句做报表统计

-- 一些用到的基本SQL函数 -- 返回日期中年的值: SQL YEAR 函数。 -- 返回日期中月的值: SQL Month 函数。 -- 返回日期中日的值: SQL Day 函数。-- ...

报表相关的后台sql语句

 /*扣件数据明细报表*/ select * from (select t.*, rownum rowno   from (select distinct ts.waybill_no,  ...

oracle sql语句根据交易类型生成统计报表...

公司有个需求,需要以商户为基础得到所有商户每类交易收费多少的统计报表,在经过百度后和自己修改达到了以下效果: 其中F1到F10代表我司的业务种类,SUMAMT为总计。下图为我们的业务...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)