有一个表结构和数据举例如下:
表名: SaleFeeRecord
表结构和数据示例如下:合同号 费用名称 费用 币种
10T0001 佣金 500 USD
10T0001 检验费 200 USD
10T0001 海运费 300 USD
10T0001 内运费 1500 RMB10T0002 佣金 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语句,使得语句能求和呢?
表名: SaleFeeRecord
表结构和数据示例如下:合同号 费用名称 费用 币种
10T0001 佣金 500 USD
10T0001 检验费 200 USD
10T0001 海运费 300 USD
10T0001 内运费 1500 RMB10T0002 佣金 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语句,使得语句能求和呢?
解决方案 »
- 如何自动备份作业,注意,我不想备份整个库(太大了),只想备份作业
- 【请教】 为什么这个游标不断输出sysobjects???我要在存储过程中循环取sysobjects中的记录该怎么做?
- BULK INSERT 将文本文件数据插入数据库中时出现“超时已过期”如何处理
- MYSQL 多表查询
- 日志传送出错“无法初始化”怎么回事?
- 请问只有一个数据表,能按给定的要求完成排序吗?
- 大家帮忙看看,我写的这个东西为什么不能实现
- 一个奇难的问题:如何使用一个Select语句查出各科的及格率
- 视图数据是视图建好就存在内存,还在询的时侯才从基础表中生成!!!!!!!!!!!!
- Access有没有类似于SQL在程序中能调用的存储过程?
- 求SQL语句
- 使用软件时客户端要需要装数据库吗?
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 個資料列受到影響)*/
sum(case when 币种='EUR' then 费用*9.82 else 0 end)+
sum(case when 币种='RMB' then 费用 else 0 end)
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'
Goselect 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 行受影响)
可以这样:
select
sum(case 币种 when 'USD' then 费用*6.82 when 'EUR' then 费用*9.82 when 'RMB' then 费用*1.0 end) as 费用
from
tb
where
....
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 行)
**/