日期:2014-05-18  浏览次数:20419 次

关于GROUP BY 语句
表   p
pid     ptypeid
1                 1
2                 1
3                 2
4                 2
表ptype
ptypeid
1
2
3
4
一个sql语句
SELECT   ptype.ptypeid,COUNT(p.pid)   as   pcount
FROM   ptype   INNER   JOIN   p   ON   ptype.ptypeid   =   p.ptypeid
GROUP   by   ptype.ptypeid
得到如下表
----------------
ptypeid             pcount
1                             2
2                             2
我想得到如下表   怎么写?
--------------------
ptypeid             pcount
1                           2
2                           2
3                           0
4                           0

------解决方案--------------------
select ptype.*,
pcount=isnull(p.pcount, 0)
from ptype
left join
(
select ptypeid, count(*) as pcount
from p
group by ptypeid
)p on ptype.ptypeid=p.ptypeid

--result
ptypeid pcount
----------- -----------
1 2
2 2
3 0
4 0

(4 row(s) affected)