数据库是这样的
userid  serid
 123     10
 123     20
 123     30
 124     10
 124     20
 125     10
 126     10
 表为use表,请问怎么样得到查询结果如下:
  10的记录  20的记录 30的记录
   4           2    1

解决方案 »

  1.   


    SELECT SUM(DECODE(serid,10,1,0)) AS 10的记录,SUM(DECODE(serid,20,1,0)) AS 20的记录,SUM(DECODE(serid,30,1,0)) AS 30的记录 FROM YOURTABLE
      

  2.   

    select sum(case when serid=10 then 1 else 0 end) as '10的记录',
    sum(case when serid=20 then 1 else 0 end) as '20的记录',
    sum(case when serid=30 then 1 else 0 end) as '30的记录'
    from tb;
      

  3.   

    典型的行转列,这个在Oracle中通常用DECODE,二楼的正确
      

  4.   

    如果serid ,有好多中类型的话,可以考虑用row_number() over(partition by order by),
      

  5.   

    select 
    (select count(*) from tb where serid = 10) [10的记录],
    (select count(*) from tb where serid = 20) [20的记录],
    (select count(*) from tb where serid = 30) [30的记录]
      

  6.   

    select count(1), serid
    from you_tb
    group by serid我记得这样是最简单的,但手边没有环境  好久没写了,应该不会错.
      

  7.   

    select serid,count(serid) from tb group by serid

    select serid,count(serid) over(partition by serid) from tb感觉用decode是有问题的,因为serid的值肯定是变的,不确定的,不仅仅是10,20或30,不能写死了!