我有一个SQL表,其数据格式如下:
REF FIRSTMONTH NoMONTHS VALUE
--------------------------------
1 2 1 100
2 4 2 240
3 5 4 200
这显示了一个引用值,该值应从FIRSTMONTH开始并在NoMONTHS上分割
我想根据引用的值计算每个月潜在交付的SUM。 因此,我需要从SQL服务器查询返回以下结果:
MONTH TOTAL
------------
2 100 <- should be all of REF=1
4 120 <- should be half of REF=2
5 170 <- should be half of REF=2 and quarter of REF=3
6 50 <- should be quarter of REF=3
7 50 <- should be quarter of REF=3
8 50 <- should be quarter of REF=3
我该怎么做?
答案 0 :(得分:1)
您正在尝试从多对多关系中提取数据。
你需要3张桌子。您应该能够从那里编写JOIN
或GROUP BY
选择语句。下表不使用与您相同的数据值,仅用于结构示例。
**Month**
REF Month Value
---------------------
1 2 100
2 3 120
etc.
**MonthGroup**
REF
---
1
2
**MonthsToMonthGroups**
MonthREF MonthGroupREF
------------------
1 1
2 2
2 3
答案 1 :(得分:0)
此查询的第一部分在有效值的开始和结束之间获取一组数字
第二部分采用每月的价值,并将其除以月度金额
然后,这只是每个月分组的情况,并将所有月度金额相加。
select
number as month, sum(amount)
from
(
select number
from master..spt_values
where type='p'
and number between (select min(firstmonth) from yourtable)
and (select max(firstmonth+nomonths-1) from yourtable)
) numbers
inner join
(select
firstmonth,
firstmonth+nomonths-1 as lastmonth,
value / nomonths as amount
from yourtable) monthly
on numbers.number between firstmonth and lastmonth
group by number