TSQL - Как использовать SUM в виртуальной COLUMN внутри выбора? - PullRequest
2 голосов
/ 30 октября 2011
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

Хорошо, я получил сумму, которую заработал КАЖДЫЙ автомобиль, но мне нужна вся сумма. Итак, есть ли способ сделать SUM из виртуальной таблицы Profit? Потому что это все, что мне нужно ... или вы предлагаете другой способ?

Ответы [ 3 ]

1 голос
/ 30 октября 2011

Используйте WITH ROLLUP в предложении GROUP 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

Это даст вам дополнительную строку с NULL в качестве значения year, а значение в столбце суммы будетбыть общей суммой по всем сгруппированным строкам.

Обновление: , поэтому вы хотите иметь сумму для каждого года, но также и другой столбец с общей суммой по всем строкам всех лет ??

Попробуйте:

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 голосов
/ 31 октября 2011

Вы можете использовать временную таблицу вместе с 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
0 голосов
/ 30 октября 2011
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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...