Mathiudi Ответов: 2

Запрос для поиска баланса кредита и дебета в SQL


Дата операции описание операции Дебет Кредит остаток
--------------- ---------------------- ----- ----- --------
Экономия 01/04/2012 0.00 2,000.00 2,000.00

01/04/2012 вывод средств 750.00 0.00 1,250. 00

Экономия 16/04/2012 0.00 8,400.00 9,650.00

20/04/2012 экономия 0.00 400.00 1,00. 50

Что я уже пробовал:

Выберите cust_id, acc_num, acc_date, acc_details, (сумма(дебет)*-1) + сумма(кредит) как RunningBalance
От cust_account_t
Группа по cust_id, acc_num, acc_date, acc_details

[no name]

Казалось бы, вы забыли задать вопрос.

Mathiudi

Я Верт к сожалению. Я здесь под давлением. Спасибо за ваши напоминания.

Может ли какой-нибудь орган помочь мне решить эту проблему?.

[no name]

Вероятно, многие люди могут решить то, о чем вы просите. Но Сначала нам нужен вопрос или хотя бы описание какой-то проблемы. Мы здесь не читаем мысли.

Mathiudi

ОК. То, что я хочу, это, скажем, 1/4/2014 клиент сделал депозит в размере 100 000 долларов, если мы должны напечатать заявление для этого клиента, заявление должно быть прочитано ниже и так далее:

Сведения О Дате Дебет Кредит Остаток
Депозит 1/4/2014 0.00 100,000.00 100,000.00

[no name]

Окей.... похоже, дело в языковом барьере. Определение таблицы и ваш запрос не совпадают, ни один из ваших комментариев не является вопросом, в вашей публикации нигде нет ровно нулевых вопросов, нет описания проблемы, нет примеров входных данных, нет примера выходных данных, которые вы получаете при выполнении запроса. Я не знаю, чего вы ожидаете от людей, основываясь на противоречивой и неправильной информации, которую вы дали нам для работы.

2 Ответов

Рейтинг:
17

OriginalGriff

Проблема почти наверняка заключается в том, что ваше предложение GROUP BY содержит слишком много столбцов - и это обычно происходит потому, что вы не понимаете, что делает GROUP by, и пытаетесь обойти ошибку "имя столбца недопустимо в списке выбора, потому что...", просто добавляя столбцы в группу by, чтобы выбрать их. Без гораздо большей информации о том, чего именно вы пытаетесь достичь, мы не можем быть совсем конкретными, но это может помочь Вам разобраться в этом самостоятельно: SQL GROUP By и ошибка" имя столбца недопустимо в списке выбора, потому что..."[^]


Рейтинг:
11

Wendelius

Если я правильно понял вопрос, один простой способ-использовать запущенные вычисления, введенные в SQL Server 2012. Рассмотрим следующий пример

CREATE TABLE #Transactions (
   TransactionDate        date,
   TransactionDescription varchar(100),
   Debit                  decimal,
   Credit                 decimal
);

INSERT INTO #Transactions VALUES 
('04/01/2012', 'Savings',    0.00,   2000.00),
('04/01/2012', 'withdrawal', 750.00, 0.00),
('04/16/2012', 'Savings',    0.00,   8400.00),
('04/20/2012', 'Savings',    0.00,   400.00);

SELECT t.TransactionDate, t.TransactionDescription, SUM(t.Credit-t.Debit) OVER (ORDER BY t.TransactionDate, t.TransactionDescription) AS Balance
FROM #Transactions t
ORDER BY t.TransactionDate, TransactionDescription;

Запрос дает следующий результат
TransactionDate TransactionDescription Balance
--------------- ---------------------- -------
2012-04-01      Savings                2000
2012-04-01      withdrawal             1250
2012-04-16      Savings                9650
2012-04-20      Savings                10050

Вы можете найти несколько альтернативных способов Вычисление простых текущих итогов в SQL Server[^]


Mathiudi

Спасибо вам за вашу заботу, за Вашу поддержку и время. Я попробовал ваш код, но он не сработал. Возможно, это связано с использованием sql 2008 express I;m. Ниже приведен код, который я придумал, и он работает на меня. Спасибо всем.


Выберите К. cust_id,К. acc_date,К. acc_details,К. дебетовые,кредитные К.

, Сумма (B. кредит-B. дебет) Как Баланс

от cust_account_t K
внутреннее соединение
cust_account_t Б
На K. acc_date >= B. acc_date
И B. cust_id <= K. cust_id
Группа К. cust_id,К. acc_date,К. acc_details,К. дебетовые,кредитные К.