CREATE TABLE b(
id CHAR(20),
name VARCHAR(1000) 
)CREATE TABLE a
(
id CHAR(20),
name VARCHAR(1000),
ynpro CHAR(1),
fid     CHAR(20)
)a-----
id          name 
1           test1
2           test2
b----
id           name   ynpro     fid
1            a1      1         1
2            a2      0         2
3            a3      1         1
4            a4      0         1
5            a5      1         2a  id 与 b fid 关联结果
  id          name     ynpro=1  ynpro=0
  1           test1    2          1
  2           test2    1          1

解决方案 »

  1.   

    这个就是普通的行列转换
    自己搜索下就能学会的
    BTW,10分能叫高分吗?不过你这问题实在是不难
      

  2.   

    select a.id, a.name, 
    sum(case when b.ynpro = 1 then 1 end),
    sum(case when b.ynpro = 0 then 1 end)
    from a,b 
    where a.id = b.fid
    group by a.id, a.name;
      

  3.   

    select a.id, a.name, 
    sum(case when b.ynpro = 1 then 1 end), 
    sum(case when b.ynpro = 0 then 1 end) 
    from ansol.tab_anode b,ansol.tab_acompany a 
    where a.id = b.fid 
    group by a.id, a.name;
    结果是1  ssh  1   2 
    2  oa    2    **想显示为0能不能用子查讯和表连接做一下
      

  4.   

    select a.id,a.name,count(decode(b.ynpro,1,1)) y1,count(decode(b.ynpro,0,0)) y0
    from a,b where a.id = b.fid
    group by a.id,a.name;
      

  5.   

    Adebayor能不能帮忙写一个用子查讯和表连接实现的
      

  6.   

    这个结果才是:
      id          name    ynpro=1  ynpro=0 
      1          test1    2          1 
      2          test2    1          1 
      

  7.   

    上面sum的写法是错误的,你先用我写的这个测试,还有别的问题再贴出来!
      

  8.   

    正确,我想用用子查讯和表连接实现的 
    不是用decode
      

  9.   

    select a.id, a.name, 
    nvl(sum(case when b.ynpro = 1 then 1 end), 0),
    nvl(sum(case when b.ynpro = 0 then 1 end), 0)
    from a,b 
    where a.id = b.fid 
    group by a.id, a.name;
      

  10.   

    select a.id, a.name,
    (select nvl(count(b.ynpro),0) from b where b.ynpro = 1 and b.fid = a.id),
    (select nvl(count(b.ynpro),0) from b where b.ynpro = 0 and b.fid = a.id)
    from a;