日期:2014-05-18  浏览次数:20487 次

年度分12月统计订单金额问题 请教!!!
大虾们: 
  现在有一个需求统计订单金额 ,订单表分主、次表:
主表 CO_ID,CO_CustomerID,CO_Date...; 
次表: CODetetal_ID,CODetail_ParentID,CODetail_MaterialID,CODetail_Amount....
关联: ON CO_ID = CODetail_ParentID

CO_CustomerID CO_Date CODetail_Amount
  A 2011-1-21 200
  B 2011-1-5 100
  C 2011-1-21 160
  A 2011-2-21 56
  C 2011-1-28 600
  C 2011-2-8 3600
  C 2011-3-8 4360


  ......



我想实现按客户年度2011全年月份统计出如下(无记录月份补为0):
  客户 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 客户合计
  A 200 56 0 ......
  B 100 0 0 ......
  C 760 3600 4360 ......
  .......

能用SQL语句一次性统计出来吧 这样效率高。 
请执教了。 


------解决方案--------------------
SQL code

select custName,
    sum(case when month(date)=1 then amount else 0 end) [1],
    sum(case when month(date)=2 then amount else 0 end) [2],
    ...
    sum(case when month(date)=12 then amount else 0 end) [12],
from tb
where year(date)=2011
group by custName

------解决方案--------------------
/*
现在有一个需求统计订单金额 ,订单表分主、次表:
主表 CO_ID,CO_CustomerID,CO_Date;
次表: CODetetal_ID,CODetail_ParentID,CODetail_MaterialID,CODetail_Amount....
关联: ON CO_ID = CODetail_ParentID
CO_CustomerID CO_Date CODetail_Amount
A 2011-1-21 200
B 2011-1-5 100
C 2011-1-21 160
A 2011-2-21 56
C 2011-1-28 600
C 2011-2-8 3600
C 2011-3-8 4360
我想实现按客户年度2011全年月份统计出如下(无记录月份补为0):
客户 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 客户合计
A 200 56 0
B 100 0 0 
C 760 3600 4360
能用SQL语句一次性统计出来吧 这样效率高。
请执教了。
*/ 

go
if OBJECT_ID('maintbl') is not null
drop table maintbl
go
create table maintbl(
CO_ID varchar(4),
CO_CustomerID varchar(10),
CO_Date varchar(8)
)
go
if OBJECT_ID('secondtbl') is not null
drop table secondtbl
go
create table secondtbl(
CODetetal_ID varchar(10),
CODetail_ParentID varchar(10),
CODetail_MaterialID varchar(10),
CODetail_Amount int
)

select CO_CustomerID as 客户,
[1月],[2月],[3月],[4月],[5月],[6月],[7月],[8月],[9月],[10月],[11月],[12月],客户合计
from(select CO_CustomerID,CO_Date,CODetail_Amount ,
客户合计=sum(CODetail_Amount)over(partition by CO_CustomerID)
from maintbl inner join secondtbl b on CO_ID = CODetail_ParentID)a
pivot (max(CODetail_Amount) 
for CO_Date in ([1月],[2月],[3月],[4月],[5月],[6月],
[7月],[8月],[9月],[10月],[11月],[12月]))b

------------------------------------------------------
--没有插入测试数据进行测试,但查出来结构对了:
/*
客户 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 客户合计
*/
------解决方案--------------------
探讨

/*
现在有一个需求统计订单金额 ,订单表分主、次表:
主表 CO_ID,CO_CustomerID,CO_Date;
次表: CODetetal_ID,CODetail_ParentID,CODetail_MaterialID,CODetail_Amount....
关联: ON CO_ID = CODetail_ParentID
CO_CustomerID CO_Date CO……

------解决方案--------------------
SQL code
select m.CO_CustomerID,
       sum(case when datepart(mm,m.CO_Date) when 1  then n.CODetail_Amount else 0 end) [01月],
       sum(case when datepart(mm,m.CO_Date) when 2  then n.CODetail_Amount else 0 end) [02月],
       sum(case when datepart(mm,m.CO_Date) when 3  then n.CODetail_Amount else 0 end) [03月],
       sum(case when datepart(mm,m.CO_Date) when 4  then n.CODetail_Amount else 0 end) [04月],
       sum(case when datepart(mm,m.CO_Date) when 5  then n.CODetail_Amount else 0 end) [05月],
       sum(case whe