2015-10-29 4 views
0

enter image description hereкак найти разницу между строк того же столбца в SQL

вопрос-> Написать запрос, чтобы показать все те номера счета, ввод, вывод, где вывод является более суммы депозита.

+1

что вы пробовали до сих пор ??? –

+1

выберите acnumber, transaction_type, сумма (TRANSACTION_AMOUNT) в количестве от trandetails группы по acnumber, transaction_type порядка по acnumber возрастанию не в состоянии получить вывод дифф ставки и депозит для конкретного acnumber – Sanjeet

+0

@ user5501922 Поместите этот запрос как часть вашего вопрос! –

ответ

0

Попробуйте это (вы также можете сделать это автообъединение):

;WITH D AS 
(
SELECT ACNUMBER, SUM(TRANSACTION) AS Deposit 
FROM TABLE_NAME 
WHERE TRANSACTION_TYPE = 'Deposit' 
GROUP BY ACNUMBER 
) 
, W as 
(
SELECT ACNUMBER, SUM(TRANSACTION) AS Withdrawal 
FROM TABLE_NAME 
WHERE TRANSACTION_TYPE = 'Withdrawal' 
GROUP BY ACNUMBER 

) 
SELECT D.ACNUMBER, d.Deposit, w.Withdrawal 

FROM D 
INNER JOIN W 
ON D.ACNUMBER = W.ACNUMBER 
WHERE d.Deposit < w.Withdrawal 
+0

Это не возвращает никаких счетов, где есть только один тип транзакции. – Adish

+0

Msg 8120, уровень 16, состояние 1, строка 3 Столбец trandetails.acnumber недействителен в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. получил эту ошибку, пока ruuniny ваш запрос @Mangal Pardeshi – Sanjeet

+0

Извините, что вам нужно GROUP BY ACNUMBER в обоих CTE –

0

Вы не должны группировать по типу сделки. Попробуйте это

select acnumber,sum(transaction_amount * case when transaction_type = 'deposit' then 1 else -1 end) as amount 
from trandetails 
group by acnumber 
order by acnumber asc 

Вас могут заинтересовать только в тех строках, где сумма является отрицательной, так как это учетные записи, в которых снят депозит. В этом случае добавьте фильтр:

select acnumber,sum(transaction_amount * case when transaction_type = 'deposit' then 1 else -1 end) as amount 
from trandetails 
group by acnumber 
having sum(transaction_amount * case when transaction_type = 'deposit' then 1 else -1 end) < 0 
order by acnumber asc 
Смежные вопросы