2016-07-21 6 views
1

У меня есть таблица со столбцами под названием:операции SQL в одной таблице

  1. ID (INT) (не уникальный)
  2. Тип (VARCHAR)
  3. Сумма (десятичное)

Для каждого идентификатора есть два типа записей. Вызываемая плата и скидка с двумя различными суммами. Я хочу вычесть сумму скидок от суммы платежа и получить окончательную сумму за каждый идентификатор. В качестве примера для Id '2' у меня может быть сумма заряда 200 и скидка 30, поэтому я хочу, чтобы мой результат был равен 170 для Id '2'

Я не могу понять, сделай это.

+0

, когда вы сделали эту таблицу, вы должны были сделать скидку отрицательной. – Jasen

ответ

2

Если вы можете быть абсолютно уверены, что нет никаких других вариантов типа, кроме «зарядки» и «скидки», то этот запрос должен работать:

select ID, 
sum(case 
     when Type = 'charge' then Amount 
     when Type = 'discount' then Amount*-1 
    end) as final_amount 
from my_table 
group by ID 

Он работает, проверив сначала, что тип преда решая, что внести вклад в сумму. Если значение равно 'charge', тогда используется сумма, в противном случае, если значение равно 'discount', тогда сумма будет списана и будет вычтена из суммы.

Предположение:

  1. 'charge' и discount являются единственными значениями возможного для типа
  2. Суммы всегда положителен Вне зависимости от типа
+0

Что делать, если я хочу заменить сумму в строке счёта final_amount? – nilan59

1

У меня есть некоторые предположения, пожалуйста, это поможет вам.

Create Table Transactions(ID Int,Type varchar(255), 
        Amount int) 

Insert Into Transactions Values(1,'Charge',10) 
Insert Into Transactions Values(1,'Discount',2) 
Insert Into Transactions Values(2,'Charge',15) 
    Insert Into Transactions Values(2,'Discount',3) 
    Insert Into Transactions Values(3,'Charge',20) 
    Insert Into Transactions Values(3,'Discount',3) 

Теперь я создал свой запрос для вас.

Select T1.ID,T1.Type,T1.Amount-T2.amount from Transactions T1 
join Transactions T2 
on T1.ID=T2.ID 
and T1.Type<>T2.Type 

Вы можете отфильтровать свой ответ, используя, где положение как

Select T1.ID,T1.Type,T1.Amount-T2.amount from Transactions T1 
join Transactions T2 
on T1.ID=T2.ID 
and T1.Type<>T2.Type 
where T1.Type='Charge' 

Пожалуйста Ответ.

Смежные вопросы