日期:2014-05-18 浏览次数:20552 次
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月 客户合计
*/
------解决方案--------------------
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