有A表结构如下:
用户代码 类型1 类型2 总额
a1 a2 a3 a4 a5
001 0 1 100
002 1 1 200
003 2 0 300
004 3 1 200想要得到的结果: 50+200+100=350
如类型1和类型2 代码都为“1”,则总额不变
如类型1和类型2 代码其中一个为“1”,则总额减半。
这样:
001 类型2=“1” 则“总额”=100*0.5=50
002 类型1=“1” 类型2=“1” 则“总额”=200
003 类型1<>“1” 类型2<>“1” 则“总额”=0
004 类型2=”1“ 则”总额“=200*0.5=100
想找类型1,和类型2,值=”2“时,所有用户的总额和,也以此类推!
我想用一条select.....where 函数来做,麻烦大仙们帮帮忙撒!
用户代码 类型1 类型2 总额
a1 a2 a3 a4 a5
001 0 1 100
002 1 1 200
003 2 0 300
004 3 1 200想要得到的结果: 50+200+100=350
如类型1和类型2 代码都为“1”,则总额不变
如类型1和类型2 代码其中一个为“1”,则总额减半。
这样:
001 类型2=“1” 则“总额”=100*0.5=50
002 类型1=“1” 类型2=“1” 则“总额”=200
003 类型1<>“1” 类型2<>“1” 则“总额”=0
004 类型2=”1“ 则”总额“=200*0.5=100
想找类型1,和类型2,值=”2“时,所有用户的总额和,也以此类推!
我想用一条select.....where 函数来做,麻烦大仙们帮帮忙撒!
select (select sum(d/2) from a where b = 1)+(select sum(d/2) from a where c =1)create proc aaa1
@n int
as
select (select sum(d/2) from a where b = @n)+(select sum(d/2) from a where c =@n)
@n int
as
select (isnull((select sum(d/2)from aa where b =@n) ,0)+(isnull((select sum(d/2)from aa where c =@n)
应该是这样,测试通过
select sum(iif(类型1=1,iif(类型2=1,总额,总额/2),0) from A表
SQL SERVER 中的写法
select case 类型1 when 1 case when 类型2 when 1 then 总额 else 总额/2 end else 0 end from A表
select sum(iif(类型1=1,iif(类型2=1,总额,总额/2),iif(类型2=1,总额/2,0)) from A表
SQL SERVER 中的写法
select sum(case 类型1 when 1 then (case 类型2 when 1 then 总额 else 总额/2 end)
else (case 类型2 when 1 then 总额/2 else 0 end) end) from A表
--创建数据测试环境
declare @A表 table(用户代码 varchar(4),类型1 int,类型2 int,总额 int)
insert into @A表
select '001',0,1,100
union all select '002',1,1,200
union all select '003',2,0,300
union all select '004',3,1,200--得到结果
select sum(case 类型1 when 1 then (case 类型2 when 1 then 总额 else 总额/2 end)
else (case 类型2 when 1 then 总额/2 else 0 end) end) from @A表--测试的结果:350
x=iif(类型1=1,总额,0)
y=iif(类型2=1,总额,0)
然后求(x+y)/2的和。
SELECT (SUM([总额])+(SELECT SUM([总额]) FROM [表A] WHERE [类型2]=1))/2 FROM [表A] WHERE [类型1]=1实际上逻辑语法这么写(不一定能运行的哦)
((SELECT SUM([总额]) FROM [表A] WHERE [类型1]=1)+])+(SELECT SUM([总额]) FROM [表A] WHERE [类型2]=1))/2