2013-10-22 70 views
1

我有以下格式數據的SQL表返回行:SQL查詢來在多個組

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

這顯示應該開始對FIRSTMONTH和拆分過NoMONTHS傳遞一個引用值

我想從報價值中計算潛在交付每個月的總和。 因此我需要從一個SQL Server查詢返回的結果如下:

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

該查詢的第一部分得到的一組起始和有效值

第二部分以每個月值的端部之間的數字,並將其劃分爲每月量

然後,它只是一個每月分組的情況,並將所有月度數量相加。

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 
+0

謝謝,podiluska,這正是我需要的。 –

1

您正在嘗試從應該是多對多關係的數據中提取數據。 你需要3張桌子。您應該能夠從那裏寫入JOINGROUP BY select語句。下表不使用與您的數據值相同的數據值,僅用於結構示例。

**Month** 
REF Month Value 
--------------------- 
1  2  100 
2  3  120 
etc. 

**MonthGroup** 
REF 
--- 
1 
2 

**MonthsToMonthGroups** 
MonthREF MonthGroupREF  
------------------ 
1   1 
2   2 
2   3