Sql表中数据如下:
姓名  卡号   上班一结果  下班一结果  上班二结果  下班二结果
王    001    病假          病假       正常        正常
赵    002    事假          事假       事假        迟到
李    003   有薪假        有薪假     有薪假       有薪假
钱    005    病假          病假       正常        正常
周    006    事假          正常       事假        迟到我现在想汇总以上数据,如病假的次数为:4次(王2次,钱2次)
                      事假的次数为:5次(赵3次,周2次)
                    有薪假的次数为:4次(李4次)
                     迟到的次数为:2次(赵1次,周1次)
应该怎样写SQL语句来实现呢

解决方案 »

  1.   

    //大概的
    select 病假=sum(上班一结果)+sum(下班一结果).....where 上班一结果='病假'....
      

  2.   

    //错了
    select 病假=count(上班一结果)+count(下班一结果).....where 上班一结果='病假'....
      

  3.   

    这是交叉表啊,建议用临时表或者视图,然后在select
      

  4.   

    TO:boz(波) 
    我按你的方式写法如下:但是不行呀你说错在那里?select iprive=count(OneinEnd)+count(OneOutENd)+count(TwoinEnd)+count(TwoOutENd)+count(ThreeinEnd)+count(ThreeOutENd)+count(FourinEnd)+count(FourOutENd)
    From tbDoCard
    where OneinEnd='病假',OneOutEnd='病假',TwoinEnd='病假',TwoOutEnd='病假',ThreeinEnd='病假',ThreeOutEnd='病假',FourinEnd='病假',FourOutEnd='病假'
      

  5.   

    //是不是这样:
    select iprive=count(OneinEnd)+count(OneOutENd)+count(TwoinEnd)+count(TwoOutENd)+count(ThreeinEnd)+count(ThreeOutENd)+count(FourinEnd)+count(FourOutENd)
    From tbDoCard
    where OneinEnd='病假' or OneOutEnd='病假'or  TwoinEnd='病假'or TwoOutEnd='病假'or ThreeinEnd='病假'or ThreeOutEnd='病假'or FourinEnd='病假'or FourOutEnd='病假'
      

  6.   

    TO:boz(波) 
    改成你这样写是可以运行的,但是查询出来的结果与最终结果不相符,总是比实际的次数要多一些,
    不知是什么原因
      

  7.   

    //如下测试通过(费我好大事儿建表哟),希望有所帮助
    select iprive=(select count(*) from tbDoCard where OneinEnd='病假')
                 +(select count(*) from tbDoCard where OneOutENd='病假')
                 +(select count(*) from tbDoCard where TwoinEnd='病假')
                 +(select count(*) from tbDoCard where TwoOutENd='病假')
                 +(select count(*) from tbDoCard where ThreeinEnd='病假')
                 +(select count(*) from tbDoCard where ThreeOutENd='病假')
                 +(select count(*) from tbDoCard where FourinEnd='病假')
                 +(select count(*) from tbDoCard where FourOutENd='病假')