主表 t1
学号     入学时间    专业 
2008A121 20080901   计算机     
2006A121 20080901   计算机     分类表 t2
分类编号   分类名称
A1         正式招收
A12        本科
A11        专科
A121       男
A120       女
A1201      有驾照
A1200      无驾照产生下表
学号        入学时间     招收类型      学历       性别   有无驾照
2008A1100   20080901     正式招收      专科       女     无驾照
2006A1211   20060901     正式招收      本科       男     有驾照

解决方案 »

  1.   

    1. 数据表的架构不合理。
    2. 你的分类表中数据都不正确。
    但是,根据你的数量其实一个表就可以查出来了:SELECT 学号,入学时间,
    CASE SUBSTRING(学号,5,2) WHEN 'A1' THEN '正式招收' END AS '招收类型',
    CASE SUBSTRING(学号,7,1) WHEN '1' THEN '专科' WHEN '2' THEN '本科' END AS '学历',
    CASE SUBSTRING(学号,8,1) WHEN '1' THEN '男' WHEN '0' THEN '女' END AS '性别',
    CASE SUBSTRING(学号,9,1) WHEN '1' THEN '有驾照' WHEN '0' THEN '无驾照' END AS '有无驾照'
    FROM t1
      

  2.   

    boblaw,恩,不是实表是个例子。 是sybase 数据库,
    这样就要枚举了,这个分类表很大。基本不可能枚举。
    CASE SUBSTRING(学号,5,2) WHEN 'A1' THEN '正式招收' END AS '招收类型',能做为连接字段吗?类似 where ((CASE SUBSTRING(学号,5,2) WHEN 'A1' THEN '正式招收' END AS '招收类型') = t1.xxx)或者 on ((CASE SUBSTRING(学号,5,2) WHEN 'A1' THEN '正式招收' END AS '招收类型') = t1.xxx)
      

  3.   

    where ((CASE SUBSTRING(学号,5,2) WHEN 'A1' THEN '正式招收' END AS '招收类型') = t1.xxx) 或者 on ((CASE SUBSTRING(学号,5,2) WHEN 'A1' THEN '正式招收' END AS '招收类型') = t1.xxx) ------------------------------------
    sybase没用过,所以不太清楚
    但在sql server中,这样的条件语句是可以的