现在有这样三张表 A表、B表、C表
其中B表、C表为A表的字表 即:A表的主键分别是B表、C表的外键
A 表
aID  a1  a2 
100 a数据 a数据
101 a数据 a数据
102 a数据 a数据
103 a数据 a数据
104 a数据 a数据 B表
bID  aID b1 stat
b100 100 b数据 0
b101 101 b数据 1
b102 100 b数据 0
b103 101 b数据 1
b104 100 b数据 1C表
cID  aID c1 stat
c100 100 c数据 1
c101 101 c数据 1
c102 100 c数据 0
c103 101 c数据 1
c104 100 c数据 1
c105 100 c数据 1 想要得到的数据
aID  a1 a2 aID对应于B表的总记录数 aID对应于B表stat为0的记录 aID对应于B表的总记录数 aID对应于B表stat为0的记录
100 a数据 a数据 3 2 4 1
101 a数据 a数据 2 0 2 0

解决方案 »

  1.   

    select a.*,b.s1,b.s2,c.s1,c.s2
    from a
    left join (select aid,count(1) as s1,sum(case when stat = 0 then 1 else 0 end) as s2 from b group by aid) b on a.aid = b.aid
    left join (select aid,count(1) as s1,sum(case when stat = 0 then 1 else 0 end) as s2 from c group by aid) c on a.aid = c.aid
      

  2.   

    SELECT aa.*,bb.B记录,bb.[B除0],cc.C记录,cc.[C除0]
    FROM a aa LEFT JOIN 
    (SELECT aId,COUNT(*) B记录,sum(case when stat=0 THEN 1 ELSE 0 END) [B除0]
    FROM B 
    GROUP BY aId
    )bb ON aa.aId=bb.bId
    LEFT JOIN 
    (
    SELECT aId,COUNT(*) C记录,sum(case when stat=0 THEN 1 ELSE 0 END) [C除0]
    FROM C 
    GROUP BY aId
    )cc ON aa.aId=cc.cId
      

  3.   

    select
     a.*,b.s1,b.s2,c.s1,c.s2
    from
     a
    left join
     (select aid,count(1) as s1,sum(case when stat = 0 then 1 else 0 end) as s2 from b group by aid) b 
    on
     a.aid = b.aid
    left join 
    (select aid,count(1) as s1,sum(case when stat = 0 then 1 else 0 end) as s2 from c group by aid) c 
    on
     a.aid = c.aid
      

  4.   

    好像不对呀,我想要的是 B表和C表 和 A表主键对应的记录总数 及 和A表主键对应且stat=0 记录个数,
      

  5.   

    对了,刚才写错了,你们写的是没有问题的,但还有一个小问题,如果 count或 sum数位0 时 显示的是 Null,如何让其显示为 0 呢 !