如何用一条sql语句得到员工表里 学历字段里值为 "硕士" "本科" "专科","其他"(小学,高中,大学,中专,夜校电大、自考,所有的都算上) 的各有多少人?用一条SQL 语句找出来。更变态的最后要求这样的表格形式输出结果。硕士  本科  专科  其他 xx人  yy人  zz人  ww人

解决方案 »

  1.   

     SqlDataSource大师竟然不懂sql,真是悲剧。
      

  2.   

    这个变态??这么简单的
    group by的结果在行列转化而已。
      

  3.   

      别人要的是一句SQL语句就解决的效果。 不是表格的效果啊。 妹纸。
      

  4.   

    group by
    至于行列转化还是用程序做好一点
      

  5.   

    楼主,多去做做HR就晓得啥个叫人事之复杂了,我记忆最深刻是上上上个月我给用友BI做个实施,按照用户的需求提取人事数据,足足花了1周时间结果是提取数据是错滴,后来只有找他们客户的人校对人事数据才提出正确的数据。主要是客户的人事数据全是乱的,规律性都没有,做的我之痛苦
      

  6.   

    select 
      sum(case xl when '本科' then c else null) 本科
      sum(case xl when '大专' then c else null) 大专
      sum(case xl when '硕士' then c else null) 硕士
      sum(case xl when '其它' then c else null) 其它
    from
    (
    select count(*) c,xl
    from
    (
    select
    *,
    case 学历
    when '本科' then 学历
    when '硕士' then 学历
    when '大专' then 学历
    else '其它'
    end as xl
    from tb
    ) as t group by xl
    as tt
      

  7.   

    额,行列转换这东西就和俺们这个版的兔子问题一样,在sql版都是无数年的月经问题
    偷偷告诉lz,sql2005以上版本身就有专用方法来做行列转换了,11楼那是sql2k的标准解
      

  8.   

    行列转换:http://blog.csdn.net/qingyun1029/article/details/6195377
      

  9.   

    呵呵,真正BT的不是这些玩意而是一些国家级的专家学者设计的“国家标准库”,那个字段非常的让人无语很多设计本身就是横着设计地,比如像国家标准水文数据。  E1  E2  E3
      20  30 40E1,E2,E3 唉太离谱了,没文档那就是天书而且知道E1,E2,E3是啥不,那是 E1==上午九点采集数据,E2=上午十点采集数据,数据表本身就是横着设计地,我都怀疑他们读过3范式没有!!
      

  10.   

    11楼 MS SQL Server 2K 的标准做法这个新语法 PIVOT 是 MS SQL Server 2005(含) 以上版本的最简单事项行列转换的。============变态需求?
    见过将BI LOAP项目当作 OLTP来用的没?
      

  11.   


    select a=(select count(1) from tb where name='硕士'),b==(select count(1) from tb where name='本科')....from tbname
      

  12.   

    select [硕士],[本科],[专科],[其他] from tb pivot(sum(人数) for 学位 in(硕士,本科,专科,其他))  as t
    这个需求蛮简单的
      

  13.   

    见过将BI LOAP项目当作 OLTP来用的没?==>见过将BI OLAP 项目当作 OLTP来用的没?==========打字要慢些了... 这两天错别字暴增...
      

  14.   


    这种数据库设计倒是没见过,
    见过一些小的行业软件,怕被人破,所以把所有字段全部以无任何意义的字符来命名的做法.
    比如一个表所有的字段都是yxx00001一直到yxx00020,那才叫一个晕.
      

  15.   

    单个会吧,然后把他们都join起来。
      

  16.   

    看来lz最近应聘呢。lz这些问题都是应聘一般的asp.net程序员时可能考试到的琐碎问题。
      

  17.   

    假设你从数据库中查询出来的数据,有两个字段(name、value),想横向排列保存成DataTable,如何做呢?可以这样            DbDataReader rec  = 读取数据库;
                var ret = new DataTable();
                foreach (DbDataRecord x in rec)  //在foreach循环结束,DbDataReader会自动Close
                {
                    ret.Columns.Add((string)x["name"], typeof(int),);
                    var row= ret.NewRow();
                    row[(string)x["name"]]= (int)x["value"];
                    ret.Rows.Add(row);
                }
    基于这比较简单,我们就可以发现,所谓要求数据库中必须用一句话来返回这个,只是用来考试的,不一定在开发中要去纠结只能用数据库查询。
      

  18.   

    嗯,多打了一个,号。并且假设查询结果的数字是int型的。你可以自己修改。我只是想为那些纠结于必须用数据库查询的人,减少一些精神压力。不一定非要纠结数据库编程,这里也谈不上什么效率、空间之类的损失(相反地数据库系统客户很快结束事务锁)。
      

  19.   

    P哥这话绝对没错,就怕碰到某些公司的技术负责人自以为SQL包打天下的。
      

  20.   

    哦呵呵,修改一下:DbDataReader rec  = 查询你的数据库;
    var ret = new DataTable();
    foreach (DbDataRecord x in rec)   //foreach结束时会自动调用DataReader的Close方法
    {
        ret.Columns.Add((string)x["name"], typeof(int));
        if (ret.Rows.Count == 0)
        {
            var row = ret.NewRow();
            row[(string)x["name"]] = (int)x["value"];
            ret.Rows.Add(row);
        }
        else 
            ret.Rows[0][(string)x["name"]]=(int)x["value"];
      

  21.   

     LS的都挺有意思,LZ更比较有意思。
      

  22.   

    确实,从效率、便捷、通用上考虑,都不应该纠结于SQL语句。
      

  23.   

    这一点都不变态,很普通,很普通的一个SQL文而已。
    Select 
      sum(if(xl = '硕士',1, 0)) as 硕士 ,
      sum(if(xl = '本科',1, 0)) as 本科 ,
      sum(if(xl = '大专',1, 0)) as 大专 ,
      sum(if(xl != '硕士' and xl !='本科' and xl != '大专',1, 0)) as 其它 
    from users;完工,我经过测试了,好使啊。
    比如,如果当前行是硕士,就加1,否则加0 。
      

  24.   

    不得不说,这个很简单的逻辑,你会在实际中遇到比这个繁琐一百倍的SQL文,关键要知道SQL是怎么工作的,这样,无论什么逻辑,你都能找到思路。
    拜拜了。
      

  25.   

    select sum(case when 学历='硕士' then 1 else 0 end ) as 硕士,
           sum(case when 学历='本科' then 1 else 0 end ) as 本科,
    这样子行不,瞎写的