2014-01-31 5 views
0

У меня есть таблица:функция Sum в SQL Server 2008

PropertyID  Amount   
-------------------------- 
    1    40     
    1    20     
    1    10      
    2    10     
    2    90    

Я хотел бы достичь:

PropertyId  Amount Total_Amount 
    ---------------------------------------  
     1    40  70 
     1    20  70 
     1    10  70 
     2    10  100 
     2    90  100 

используя ниже запроса:

SELECT 
    PropertyID, 
    SUM(Amount), 
    SUM(TotalAmount) 
FROM 
    yourTable 
WHERE 
    EndDate IS NULL 
GROUP BY 
    PropertyID 

Выход:

PropertyId  Amount TotalAmount 
    -------------------------------------  
     1    70  70 
     2    100  100 

Позвольте мне знать, как я могу получить свой желаемый результат ...

+0

Какая версия SQL Server? –

ответ

5

Вы можете сделать это с помощью окна функции:

select PropertyID, Amount, 
     sum(Amount) over (partition by PropertyId) as TotalAmount 
from yourtable; 

Функция окна для sum() делает следующее. Он вычисляет сумму amount для групп строк в той же группе. Группа определяется положением partition by, поэтому строки с одинаковым значением PropertyId находятся в одной группе.

+0

Должна ли быть группа? – Jaques

+0

@Jaques. , , Не должно быть 'group by'. Спасибо, что заметили. –

0
SELECT PropertyID, 
    Amount, 
    (select sum(yt.Amount) 
     from yourTable yt where yt.PropertyID==y.PropertyID and yt.EndDate IS NULL) 
    as TotalAmount 
    FROM yourTable y 
    WHERE y.EndDate IS NULL 
Смежные вопросы