#sql #sql-server
#sql #sql-server
Вопрос:
Я хочу рассчитать текущий баланс в SQL server, но он показывает синтаксическую ошибку возле операторов ‘=’ и ‘: =’. Не знаю, как добавлять значения. Я делюсь своим SQL-запросом, который я использую.
SQL-запрос:
declare @tempbal decimal(18,0)
set @tempbal = (select top 1 (balance)
from t1
left outer join t2 on t2.accountno = t1.accountno
left outer join t3 on t1.cc = t2.dc
where accountNo = '1234')
select
'Date',
'Description',
isnull(case when t1.amount<0 then (t1.amount) end,0) as Debit,
isnull(case when t1.amount>0 then (t1.amount) end,0) as Credit,
(@tempbal = @tempbal (t1.amount) as balance
from t1
left outer join t2 on t2.accountno = t1.accountno
left outer join t3 on t1.cc = t2.dc
where accountNo = '1234')
Здесь я получаю:
неправильная синтаксическая ошибка возле ‘=’ sign в инструкции select.
Я много искал в Google, но не смог найти решение для решения этой проблемы. Я также использовал оператор ‘:=’, но это не сработало.
Я добавляю выходные данные, которые получаю после применения ‘ sum (t1.balance t1.amount) в качестве баланса’, здесь столбец баланса имеет значение 5970.12. на основе этого я получил это….Я также упомянул ожидаемый результат.
Date | Desc | Amount | Balance | Expected Balance
2020-01-01 |Ref12 | 6.8 | 5976.92 | 5976.92
2020-01-06 |ref34 | 850 | 6820.12 | 6826.92
2020-01-22 |ref44 | 22032 | 28002.12 | 28858.92
2020-02-07 |ref54 | -26000 | -20029.88 | 2858.92
Пожалуйста, помогите мне выбраться из этого беспорядка…
Спасибо
Комментарии:
1. вы не можете присвоить значение переменной
@tempbal
просто так2. какую версию
SQL Server
вы используете? Вы можете использоватьSUM(col) OVER (ORDER BY somecol)
для получения текущего итога3. Вы можете проверить этот ответ .
4. Я использую Sql server 2017
5. Пожалуйста, добавьте примерные данные и ожидаемый результат в виде текста к вопросу.
Ответ №1:
Вы можете использовать SUM() OVER( ORDER BY ... )
для текущего итога
ваш запрос может быть следующим
select [Date],
[Description],
isnull(case when t1.amount<0 then (t1.amount) end,0) as Debit,
isnull(case when t1.amount>0 then (t1.amount) end,0) as Credit,
SUM(t1.amount) OVER (ORDER BY [Date]) as balance
from t1
left outer join t2 on t2.accountno = t1.accountno
left outer join t3 on t1.cc = t2.dc
where t1.accountNo = '1234'
Обновленный запрос :
добавлен начальный баланс из первой строки в текущий баланс.
select [Date],
[Description],
isnull(case when t1.amount<0 then (t1.amount) end,0) as Debit,
isnull(case when t1.amount>0 then (t1.amount) end,0) as Credit,
case when row_number() over (order by [Date]) = 1
then balance
else 0
end
SUM(t1.amount) OVER (ORDER BY [Date]) as balance
from t1
left outer join t2 on t2.accountno = t1.accountno
left outer join t3 on t1.cc = t2.dc
where t1.accountNo = '1234'
Комментарии:
1. Это добавление строки за строкой. Но я хочу добавить сумму дебета / кредита с предыдущим балансом, чтобы получить новый баланс …. Надеюсь, вы поймете суть.
2. @MohammadAreeb пожалуйста, добавьте некоторые примеры данных и ожидаемые результаты, чтобы проиллюстрировать ваши требования.
3.
ORDER BY [Date] ROWS UNBOUNDED PRECEDING
4. @Squirrel Я обновил запрос, но он выдает ошибку в предложении order by …… Неправильный синтаксис рядом с ‘order’
5. Пожалуйста, обновите вопрос с помощью запроса, который вы использовали