有一个数据表,里面的lh字段是这样写的:
L1-01 ……
L1-02 ……
L2-01 ……
L2-02 ……
L2-03 ……
我开始是这样写的:来统计出来L1有几组数据:
sql:='select top 100 left(lh,2)as 炉号,,count(*) as 数量 from zkd_scgl_zxjh where zhqr=''1'' group by left(lh,2)order by 炉号';
但有的lh很特殊,是这样的:
L1-01 ……
L1-02 ……
L2-01 ……
L2-02 ……
L2-03 ……
L3A-01 ……
L3A-02 ……
 这样,有的lh我就需要left(lh,3)了,说白了,就是我需要-之前的数据作为lh统计。怎么写?

解决方案 »

  1.   

    那你就根据总体字段长度去选择是2还是3
    access中用iif函数,sqlserver中用case..when语法
      

  2.   

    patindex('-',lh)定位到‘-’在lh字段中第一次出現的位置
    sql:='select top 100 left(lh,patindex('-',lh))as 炉号,,count(*) as 数量 from zkd_scgl_zxjh where zhqr=''1'' group by left(lh,patindex('-',lh))order by 炉号';
      

  3.   

    select top 100 left(lh,patindex('-',lh))as 炉号,,count(*) as 数量 from zkd_scgl_zxjh where zhqr=''1'' group by left(lh,patindex('-',lh))order by 炉号'
      

  4.   

    我用
    select top 100 left(lh,patindex('%-%',lh)) as aa,id from zkd_scgl_zxjh group by lh,left(lh,patindex('%-%',lh)),id order by id desc
    显示出来的是L1-,和L3A-,
    怎么才能不要那个‘-’呢?
      

  5.   

    你再用sql的substring函數處理一下即可
      

  6.   

    恩,直接用substring,我直接用的是炉号的长度减3就完事了,-之前的长度会变,但它后面的不会变。