SQL查询返回多个组中的行

时间:2013-10-22 15:07:50

标签: sql sql-server

我有一个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

我该怎么做?

2 个答案:

答案 0 :(得分: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

答案 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