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

求问题解决方法!sql难度大!有点挑战
有点复杂!
A表:
SQL code

AID    Name  Region
1      张三  东区
2      王二  西区
3      张毛  东区
4      王三  北区


B表:
SQL code

BID  AID  ShopName    BeigionDate   EndDate
1     1    慢点店铺   2011-1-11    2012-12-12
2     3    张三店铺   2011-1-11    2012-12-11
3     4    有人店铺   2011-1-11    2012-12-11


C表:
SQL code

CID  BID  Amount  Date
1     1    2000   2012-4-12
2     1    5000   2012-4-15
3     2    4000   2012-4-2



需得到报表:(数据是随便填的)
区域 同比店铺数量 同比MTD 同比YTD 区域店铺数量 区域MTD 区域YTD
张三 2 -2% -10% 3 4% 10%
张毛
东区
王二
西区
王三
北区
All

解释来源:(人员下面有N店铺)
区域:显示的数据就是目前写在里面的格式。
同比店铺数量: B表对应C表有数据。(今年1,2,3,4(4是当前月,如果是10月,就依次下去比较)和去年1,2,3,4相比较都有数据。才算数量)C表的:Date

同比MTD:当前月(C表:Date)的数据(C表:Amount)除以上一年的这个月的数据(C表Amount)-1 (且当月不能没有数据)

同比YTD:截至目前月(C表:date)(比如现在是:1 2 3 4 )的数据(C表:Amount)除以对应上一年的数据-1 (且当月不能没有数据)

区域店铺数量:当前月数据(c表)不为空就算。

区域MTD:当前月C表数据(C表:Amount)相加除以上一年当月数据-1

区域YTD:截至目前月(C表:date)(比如现在是:1.2.3.4 的总和)的数据(C表:Amount)除以对应上一年的数据-1 (且当月不能没有数据)

有点复杂!求高手相助!

------解决方案--------------------
貌似比我提的问题还复杂
路过~``````````
------解决方案--------------------
尼玛,这些问题咋都这么变态
------解决方案--------------------
楼上带勋章的,给我去瞅瞅问题咋解决
------解决方案--------------------
关注这个帖子,MSSQL不借助外部工具,可以同时实现明细和统计功能?

------解决方案--------------------
-- 先构建基础数据视图
-- 关注地区、人员、月份、数量
create view vw_summaryas
select Region, Name, Mn, sum(amount) as Amount
from (
-- 各月各店铺的销售合计
select BID, 
dateadd(month,datediff(month,0,[date]),0) as Mn, 
sum(Amount) as amount
from tableC
group by BID, dateadd(month,datediff(month,0,[date]),0)
) as c
join tableB b on b.BID=c.BID
join tableA a on a.AID=b.AID
group by Region, Name, Mn

------解决方案--------------------
-- 再基于此视图编写若干函数给出人员月份,计算环比,同比..