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...
  • feiyu84
  • feiyu84
  • 2011年07月20日 15:17
  • 655

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. 并集UNIONSELECT column1, column2 FROM table1UNIONSELECT column1, column2 FROM table2b. 交集JOINSELE...
  • hebmc1
  • hebmc1
  • 2011年05月15日 22:11
  • 430

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

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

sql语句中的连接(join)左连接,右连接,全连接,交叉连接

关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释,相信会对你有所启示。  --建表table1,table2: create tabl...

小白开发报表工具(解析SQL语句)

第一次将自己开发的一个功能写在博客上
  • bjsywyq
  • bjsywyq
  • 2017年10月30日 10:57
  • 25

SQL语句做报表统计

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

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

公司有个需求,需要以商户为基础得到所有商户每类交易收费多少的统计报表,在经过百度后和自己修改达到了以下效果: 其中F1到F10代表我司的业务种类,SUMAMT为总计。下图为我们的业务...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql语句交叉报表实现
举报原因:
原因补充:

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