2011-10-30 49 views
2
create proc sp_SumVirtual 
as 
    select a.year, sum(b.PriceDay*b.AmmountDays) profit 
    from vehicles a, rent b 
    where a.Matriculation = b.Matriculation 
    GROUP BY a.year 

好吧,這樣我就得到了每輛車所賺的金額,但我需要全部的金額。那麼,有沒有一種方法可以讓我從虛擬表格Profit中獲取SUM?因爲這就是我需要的一切..或者你有其他建議嗎?TSQL - 如何在select中的虛擬COLUMN中使用SUM?

+1

這告訴你每年多少錢,而不是每輛車多少錢 - 只是在說' –

+0

如果這是一個udf而不是proc,這會更容易 - 是否有這種可能性? Procs是一個痛苦的操縱來自TSQL內部的結果 –

回答

1

使用WITH ROLLUPGROUP BY條款:

SELECT 
    a.year, SUM(b.PriceDay*b.AmmountDays) profit 
FROM 
    dbo.vehicles a 
INNER JOIN 
    dbo.rent b ON a.Matriculation = b.Matriculation 
GROUP BY 
    a.year WITH ROLLUP 

這會給你一個額外的一行NULLyear值和總和列中的值將是在所有分組的行總和。

更新:所以你想有每年的總和,但也是所有年份的所有行總和的另一列?無論其

SELECT 
    a.year, 
    SUM(b.PriceDay*b.AmmountDays) profit, 
    (SELECT SUM(b2.PriceDay * b2.AmountDays) 
    FROM dbo.vehicles a2 
    INNER JOIN dbo.rent b2 ON a2.Matriculation = b2.Matriculation) AS TotalProfit 
FROM 
    dbo.vehicles a 
INNER JOIN 
    dbo.rent b ON a.Matriculation = b.Matriculation 
GROUP BY 
    a.year 

試試這個,這將表演得非常好,因爲你一次又一次地計算TotalProfit - 每一行,這將是輸出.....

+0

我知道這一切搞砸自從西班牙語,我不得不刪除從proc許多事情,使其簡化..我可能有一些錯誤there..But我真的需要關於這個過程是給我一個新的列與利潤的行總和..非常感謝你! BTW .. –

+0

「sum(b2.PriceDay * b2.AmountDays)over()」而不是子查詢更簡單,應該更有效 – Alexey

0
Select v.year, Sum(r.PriceDay*r.AmmountDays) profit 
From vehicles v Join rent r 
    On r.Matriculation = v.Matriculation 
Group By v.year 
With RollUp 
0

你可以使用一個臨時表與UNION ALL一起:

SELECT 
    a.year, SUM(b.PriceDay*b.AmmountDays) profit 
INTO #Temp 
FROM 
    dbo.vehicles a 
INNER JOIN 
    dbo.rent b ON a.Matriculation = b.Matriculation 
GROUP BY 
    a.year 

SELECT * 
FROM #Temp 

UNION ALL 

SELECT year, Sum(profit) 
FROM #Temp 
Group by year 
相關問題