select x.a,convert(numeric(10,2),x.c)/(x.c+y.c) as e,convert(numeric(10,2),y.c)/(x.c+y.c) as f
from [图(1)] x,[图(1)] y
where x.a=y.a
and x.b=1 
and y.b=0
group by x.a
这是个思路

解决方案 »

  1.   

    --如果从上面的结果来统计,就是这样select a
    ,E=cast(cast(sum(case b when 1 then c*100.0 else 0 end)
    /sum(c) as decimal(10,2)) as varchar)+'%'
    ,F=cast(cast(sum(case b when 0 then c*100.0 else 0 end)
    /sum(c) as decimal(10,2)) as varchar)+'%'
    from [图(1)]
    group by a
      

  2.   

    如果[图(1)]是个汇总语句,如:select a,b,count(*) from tablename
    group by a,b可以直接改为:select a,sum(case when b=1 then 1.0 else 0.0 end)/sum(1.0),
    sum(case when b=0 then 1.0 else 0 end)/sum(1.0)
    from tablename
    group by a
      

  3.   

    原来的语句(图1的结果):
    select a.co_name,c.if_app,count(*)
    from AGENT_CO a,AGENT_CO_YEAR b,AGENT_CLIENT_DATA c
    where a.level_no = b.level_no and a.co_no = b.co_no
    and a.level_no = c.level_no and a.co_no = c.co_no
    where a.level_no = '440601' and c.year_no = '20034'
    group by a.co_name,c.if_app
      

  4.   

    --应该是这样写的才对:select a.co_name
    ,E=cast(cast(sum(case c.if_app when 1 then 100.0 else 0.0 end)
    /count(*) as decimal(10,2)) as varchar)+'%'
    ,F=cast(cast(sum(case c.if_app when 0 then 100.0 else 0.0 end)
    /count(*) as decimal(10,2)) as varchar)+'%'
    from AGENT_CO a
    join AGENT_CO_YEAR b on a.level_no = b.level_no and a.co_no = b.co_no
    join AGENT_CLIENT_DATA c on a.level_no = c.level_no and a.co_no = c.co_no
    where a.level_no = '440601' and c.year_no = '20034'
    group by a.co_name
      

  5.   

    不会吧,有问题吗?我用的是sybase,没问题的,sqlserver同样也可以运行
    我现在不在公司,不过大概就是这样子,不好意思上面语句搞错了:
    select a.co_name,c.if_app,count(*)
    from AGENT_CO a,AGENT_CO_YEAR b,AGENT_CLIENT_DATA c
    where a.level_no = b.level_no and a.co_no = b.co_no
    and a.level_no = c.level_no and a.co_no = c.co_no
    and a.level_no = '440601' and b.year_no = '20034'
    group by a.co_name,c.if_app
      

  6.   

    你仔细看看你第一次帖出来的语句,居然有两个where,后面这个没问题了.