有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.   

    你说的应该是一个函数或存储过程,因为你有一个参数需要传递(你要选的是1还是2等)只需要1的话:
    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)
      

  2.   

    select (isnull((select sum(d/2) from a where b =1) ,0))+(isnull((select sum(d/2)from aa where c =1) ,0))create proc aaa1 
    @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)
    应该是这样,测试通过
      

  3.   

    这样一句不就行了吗?ACCESS中的写法
    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表
      

  4.   

    上面的语句考虑得不够周全,重新更正如下ACCESS中的写法
    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表
      

  5.   

    下面是我在SQL SERVER中做的测试:
    --创建数据测试环境
    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
      

  6.   

    SELECT SUM(((CASE [类型1] WHEN 1 THEN [总额] CASE [类型1] WHEN NOT 1 THEN 0)+(CASE [类型2] WHEN 1 THEN [总额] CASE [类型2] WHEN NOT 1 THEN 0))/2) FROM [表A]你所要的方法可以理解成,
    x=iif(类型1=1,总额,0)
    y=iif(类型2=1,总额,0)
    然后求(x+y)/2的和。
      

  7.   

    同一个思路还可以这么写:
    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