同一个表

时间:2016-07-21 05:09:21

标签: mysql sql datatable

我有一个名为:

的列表
  1. ID(int)(非唯一)
  2. 类型(varchar)
  3. 金额(十进制)
  4. 对于每个ID,都有两个'类型的记录。称为两种不同金额的费用和折扣。 我想从收费金额中扣除折扣金额,并获得每个ID的最终金额。 作为Id' 2'的一个例子。我的收费金额可能为200,折扣金额为30,因此我希望我的结果为1,而且我的结果为170' 2'

    我无法找到一种干净的方法来做到这一点。

2 个答案:

答案 0 :(得分:2)

如果你可以绝对确定除了'charge'和'discount'之外没有其他类型的变种,那么这个查询应该有效:

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. 的唯一值
  3. 无论类型
  4. ,金额总是正数

答案 1 :(得分: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

您可以使用

之类的where子句过滤您的答案
 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'

请回复。