1

我有一个 SQL 表,其中包含以下格式的数据:

REF  FIRSTMONTH  NoMONTHS  VALUE
--------------------------------
1    2           1         100
2    4           2         240
3    5           4         200

这显示了一个引用值,该值应从 FIRSTMONTH 开始交付并拆分为 NoMONTHS

我想根据引用的值计算每个月潜在交付的总和。因此,我需要从 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

我怎样才能做到这一点?

4

2 回答 2

1

您正在尝试从应该是多对多关系中提取数据。你需要 3 张桌子。您应该能够从那里编写一个JOINGROUP 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
于 2013-10-22T15:18:03.013 回答
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
于 2013-10-22T15:30:40.060 回答