日期:2014-05-19  浏览次数:20488 次

求能对一个表内的两个字段做统计的sql语句.
tabel1
iID   posID   cState
1           2           1
2           2           1
3           2           0
4           3           1
5           3           0

想实现
posID     posIDNum   cStateNum
2                 3                     2
3                 2                     1

也就是按posID分组然后count(posID)   得出posIDNum的值,
cStateNum是   Where   cState= '1 '时得出的值.
但cStateNum的值具体怎么得出想不明白,请指点一下.十分感谢!


------解决方案--------------------
create table T(iID int, posID int, cState int)
insert T select 1, 2, 1
union all select 2, 2, 1
union all select 3, 2, 0
union all select 4, 3, 1
union all select 5, 3, 0

select posID,
posIDNum=count(*),
cStateNum=sum(case when cState=1 then 1 else 0 end)
from T
group by posID

--result
posID posIDNum cStateNum
----------- ----------- -----------
2 3 2
3 2 1

(2 row(s) affected)