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

一统计的sql问题,大家来看看
现在有一个表A
id     otherid       etc                 time
1           33               abcd             ..
2           33               wdct             ..
3           34               qwct             ..
4           54               5675
..         ..               ..
现在要统计有多少个otherid,   多少个三位为c的etc
要求otherid唯一,下面的语句能统计唯一的otherid
但是etc的统计就没办法distinct   otherid了,求解
select   count(distinct   otherid),
sum(
case   substring(isanythingm,3,1)  
when   'c '   then   1  
else   0
end  
)
where   1=1
group   by   month(time)

------解决方案--------------------
try:

select count(distinct otherid),
count( distinct
case substring(isanythingm,3,1)
when 'c ' then otherid
else null
end
)
from ...
group by month(time)

------解决方案--------------------
select count(distinct otherid) from
(
select * from tb where substring(etc,3,1) = 'c '
) t

------解决方案--------------------


select count(distinct otherid),sum(case thingm when 'c ' then 1 else 0 end )
from
(select distinct otherid,substring(isanythingm,3,1) as thingm,time
from table
where 1=1) a
group by month(time)
这样试试,先把 字符截取好 再GROUP
------解决方案--------------------
create table test(id int,otherid int,etc varchar(10))
insert test select 1,33, 'abcd '
union all select 2,33, 'wdct '
union all select 3,34, 'qwct '
union all select 4,54, '5675 '

select count(1) from test a where id=
(
select top 1 id from test where otherid=a.otherid and substring(etc,3,1)= 'c '
)

-----------
2