我有一个包含字段ID,操作和值的表。 ID是记录名称,action是值表示的标识符。表中的ID值与不同的操作和值重复。
示例:
ID action value
3603 1 78
3603 2 2
3603 3 1
5645 1 45
etc...
现在我想构建一个select语句,它会以某种方式得到ID = 3603且公式为的值(如果action 1则值* 10,如果action 2则值为* 5,如果action 3则值为* 2) 。 3603的结果是792。
最重要的是,我需要将它连接到另一个表,我有相同的ID值(唯一),我需要按这个总和两个表排序...
这可能或者我应该为每条记录做一些累积表来保存这笔金额吗?问题是这是统计计算,因此每个ID将获得每月和每年的3个操作输入(每月统计数据)。
答案 0 :(得分:1)
select sum(
case
when action = 1 then value * 10
when action = 2 then value * 5
when action = 3 then value * 2
end) as total
from table
where id = 3603
答案 1 :(得分:1)
select sum(CASE t.action WHEN 1 then t.value * 10 when 2 then value*5 when 3 then value*2 end) from table t
group by t.id
上面的选择将根据id的
计算给定表的总和答案 2 :(得分:1)
这是一种可能的方式,有多个表和一个订单。它应该相当有效,每月只有3个值。
select table_with_fields.ID,
table_2.field_1,
table_2.field_2,
sum(
CASE action
when 1 then value * 10
when 2 then value * 5
when 3 then value * 2
END) as full_amount
from table_with_fields
join table_2 on table_with_fields.id = table_2.id
group by table_with_fields.ID,
table_2.field_1,
table_2.field_2
order by full_amount
答案 3 :(得分:1)
select id,action,sum(
CASE t.action
WHEN 1 then t.value * 10
when 2 then value*5
when 3 then value*2 end
) AS S
from table_multy t join table_single s on t.id=s.id
group by t.id
order by ( sum(
CASE t.action
WHEN 1 then t.value * 10
when 2 then value*5
when 3 then value*2 end
) + s.other_val )
保存在历史表中使用:
insert into thistory (col1,clo2,clon) select ....