求 SQL 语句 Select case when 累计求和语句

cnsuneasy 2010-03-10 12:58:36
有一个表结构和数据举例如下:
表名: SaleFeeRecord
表结构和数据示例如下:

合同号 费用名称 费用 币种
10T0001 佣金 500 USD
10T0001 检验费 200 USD
10T0001 海运费 300 USD
10T0001 内运费 1500 RMB

10T0002 佣金 600 USD
10T0002 检验费 400 USD
10T0002 海运费 600 USD
10T0002 内运费 2000 RMB

我想用类似下面的语句来求指定合同号的所有费用之和:

strQuery = "select 费用=case when 币种='USD' then 费用*6.82 " & _
"when 币种='EUR' then 费用*9.82 " & _
"when 币种='RMB' then 费用*1 " & _
"end" & _
" from SaleFeeRecord where 合同号='" & strOrderNo + "'"

比如求合同号 10T0001的所有费用之和应该为 8320RMB
500*6.82+200*6.82+300+6.82+1500=8320 RMB
怎样修改上面的SQL语句,使得语句能求和呢?
...全文
2140 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sql_db 2010-03-10
  • 打赏
  • 举报
回复
select 费用=sum(费用*(case when 币种='USD' then 6.82 when 'EUR' then 9.82 else 1 end)) from tb where 合同号='10T0001'
sql_db 2010-03-10
  • 打赏
  • 举报
回复
create table [tb]([合同号] varchar(7),[费用名称] varchar(6),[费用] int,[币种] varchar(3))
insert [tb]
select '10T0001','佣金',500,'USD' union all
select '10T0001','检验费',200,'USD' union all
select '10T0001','海运费',300,'USD' union all
select '10T0001','内运费',1500,'RMB' union all
select '10T0002','佣金',600,'USD' union all
select '10T0002','检验费',400,'USD' union all
select '10T0002','海运费',600,'USD' union all
select '10T0002','内运费',2000,'RMB'

select 费用=sum(费用*(case when 币种='USD' then 6.82 else 1 end)) from tb where 合同号='10T0001'


/**
费用
----------------------------------------
8320.00

(所影响的行数为 1 行)
**/
--小F-- 2010-03-10
  • 打赏
  • 举报
回复
当然没有的话
可以这样:
select
sum(case 币种 when 'USD' then 费用*6.82 when 'EUR' then 费用*9.82 when 'RMB' then 费用*1.0 end) as 费用
from
tb
where
....
ws_hgo 2010-03-10
  • 打赏
  • 举报
回复
if not object_id('tb') is null
drop table tb
Go
Create table tb([合同号] nvarchar(7),[费用名称] nvarchar(3),[费用] int,[币种] nvarchar(3))
Insert tb
select N'10T0001',N'佣金',500,N'USD' union all
select N'10T0001',N'检验费',200,N'USD' union all
select N'10T0001',N'海运费',300,N'USD' union all
select N'10T0001',N'内运费',1500,N'RMB' union all
select N'10T0002',N'佣金',600,N'USD' union all
select N'10T0002',N'检验费',400,N'USD' union all
select N'10T0002',N'海运费',600,N'USD' union all
select N'10T0002',N'内运费',2000,N'RMB'
Go

select sum(case when 币种='USD' then 费用*6.82 else 0 end)+
sum(case when 币种='EUR' then 费用*9.82 else 0 end)+
sum(case when 币种='RMB' then 费用 else 0 end)
from tb
where 合同号='10T0001'



---------------------------------------
8320.00

(1 行受影响)
ws_hgo 2010-03-10
  • 打赏
  • 举报
回复
select sum(case when 币种='USD' then 费用*6.82 else 0 end)+
sum(case when 币种='EUR' then 费用*9.82 else 0 end)+
sum(case when 币种='RMB' then 费用 else 0 end)
水族杰纶 2010-03-10
  • 打赏
  • 举报
回复
if not object_id('tb') is null
drop table tb
Go
Create table tb([合同号] nvarchar(7),[费用名称] nvarchar(3),[费用] int,[币种] nvarchar(3))
Insert tb
select N'10T0001',N'佣金',500,N'USD' union all
select N'10T0001',N'检验费',200,N'USD' union all
select N'10T0001',N'海运费',300,N'USD' union all
select N'10T0001',N'内运费',1500,N'RMB' union all
select N'10T0002',N'佣金',600,N'USD' union all
select N'10T0002',N'检验费',400,N'USD' union all
select N'10T0002',N'海运费',600,N'USD' union all
select N'10T0002',N'内运费',2000,N'RMB'
Go
select 费用=sum(case when 币种='USD' then 费用*6.82
when 币种='EUR' then 费用*9.82
when 币种='RMB' then 费用*1.0
end)

from tb where 合同号='10T0001'
/*
费用
---------------------------------------
8320.00

(1 個資料列受到影響)

*/
--小F-- 2010-03-10
  • 打赏
  • 举报
回复
我觉得需要一个货币转换为RBM的对照表比较好一点

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧