У меня есть запрос, который выглядит следующим образом:SQL Выполнение полного или сазе на нарастающую сумму
SELECT b.HH,
b.TotalRevenues,
b.TotalOperatingExpenses,
b.TotalAUA,
(b.TotalRevenues -b.TotalOperatingExpenses) AS Profit,
((b.TotalRevenues -b.TotalOperatingExpenses)/sum((b.TotalRevenues -b.TotalOperatingExpenses))) AS percentProfit FROM
(SELECT * FROM
(SELECT CASE
WHEN (LTRIM(RTRIM(v.ISM_HH_KEY)) <> '')--OR
--(LTRIM(RTRIM(v.ISM_HH_KEY)) IS NOT NULL)
THEN LTRIM(RTRIM(v.ISM_HH_KEY))
ELSE LEFT(LTRIM(RTRIM(v.ACCOUNT)), 6)
END AS 'HH', [WealthDB].[dbo].[WF_PM_SUM_DB].account AS 'Account', (sum(DB_1_1) + sum(DB_1_2) + sum(DB_1_3) + sum(DB_1_5) + sum(DB_2_1_1) + sum(DB_2_1_2) + sum(DB_2_2_1) + sum(DB_2_2_2)+SUM(DB_3_1)) AS 'TotalRevenues', SUM(DB_4) AS 'TotalOperatingExpenses', AVG(DB_10) AS 'TotalAUA'
FROM [WealthDB].[dbo].[WF_PM_SUM_DB]
INNER JOIN
(SELECT DISTINCT ISM_HH_Key, account, Municipality
FROM [WealthDB].[dbo].[WF_PM_ACCT_det_DB]) AS v ON [WealthDB].[dbo].[WF_PM_SUM_DB].Account = v.Account
WHERE [WealthDB].[dbo].[WF_PM_SUM_DB].yearmonth > '201512'
GROUP BY v.account, V.ISM_HH_Key,[WealthDB].[dbo].[WF_PM_SUM_DB].account, v.Municipality -- (
) a
GROUP BY a.HH, a.Account, a.HH, a.TotalRevenues, a.TotalOperatingExpenses,a.TotalAUA
HAVING a.TotalAUA > 0
AND a.TotalRevenues>0) b
GROUP BY b.HH,
b.TotalRevenues,
b.TotalOperatingExpenses,
b.TotalAUA
HAVING (b.TotalRevenues -b.TotalOperatingExpenses) > 0
ORDER BY profit ASC
я получаю выход, который выглядит как
Account Revenue Expenses Profit PercentageProfit
XXXX $100,000 $20000 $15,000 1
YYY $90000 $20000 $14,000 1
Прибыль percaentage не рассчитывается так как он показывает 1 в каждой строке, а также я хочу другой столбец, который дает мне текущую общую процентную прибыль в другом столбце, например:
Account Revenue Expenses Profit PercentageProfit RunningTotal
XXXX $100,000 $20000 $15,000 0.32% 0.32%
YYY $90000 $20000 $14,000 0.29% 0.61%
SQL-сервер, над которым я работаю, - это версия 2000, поэтому я не могу использовать функции рангов. Какие-либо предложения. Я не думаю, что могу использовать предложения OVER, поэтому я не могу сделать неограниченную сумму в столбце прибыли, чтобы получить процентную прибыль.
Кроме того, когда мы имеем бегущую общий столбец может я использовать тематические заявления, как
CASE WHEN RUNNINGTOTAL < 1% THEN 'TOP 1%'
CASE WHEN RUNNINGTOTAL >1% AND <20% THEN '1-20%'
END AS 'SEGMENT'
КТР были введены в SQL Server 2005, вопрос находится на SQL Server 2000 – SqlZim
@ SqlZim - Обновлено .. Все еще не уверен, что запрос будет работать на '2000': \ Я начал свою карьеру 2 года назад: D –
Ya, это становится сложно в 2000 году. Я не уверен, как иначе я буду делать это иначе, чем что вы опубликовали. Over() была введена в 2008 году, но я думаю, что это ошибка вырезания/вставки в обновлении. – SqlZim