数据库为sql server2005想做一个这样的查询  有两个表 一个是清单1
1 读取表1.StrList,StrList的第2个字母是B或I的话,代码是StrList的第四个字母,若是第二字母不为B或I,代码是第五个字母。
2 通过表1里查找的代码,到表2里面是匹配,每个代码对应一个名字,把不重复名字列出来。例 表1  StrList  表二  ID  name
        ABCDE          D    日期
        AIFDS          M    月份   
        CAFAD
        CAFAM按照前面的说明  StrList 的第一个值 ABCDE的第二个字母是B,所以 代号为第四个字母  D ;
                          第二个值 AIFDS的第二个字母是I,所以 代号也为第四个字母  D ;
                          第三个值 CAFAD的第二个字母是A,所以 代号为第五个字母 也是 D ;
                          同理的第五个值的代号是M这样 到表二里去查,的到不重复的名字显示出来 就是 日期,月份在这种情况下查询语句应为select id, name from table2 where id in(
select case 
when substr(StrList,2,1) = 'B' or substr(StrList,2,1) = 'I' then substr(StrList,4,1) 
else substr(StrList,5,1) end as temp from table1
)上面的语句经验证是正确的
下面想再加一个条件  在选代码ID之前还需先做一轮筛选  
条件为:给出筛选代码 先选出筛选代码与给出的一样的StrList
3  :读取表1.StrList,StrList的第2个字母是B或I的话,筛选代码是StrList的第1个字母,若是第二字母不为B或I,代码是第1+2个字母。
然后再在结果中进行上面说的操作。 例如给出筛选代码 String sxID="A";根据3这个条件   那么筛选出来的strList 为ABCDE,AIFDS两个根据条件1再找出业务代码,接着前面的继续。请给出sql语句,谢谢!

解决方案 »

  1.   

    String sxID = "D"select id, name from table2 where id in(
    select case
    when substr(StrList,2,1) = 'B' or substr(StrList,2,1) = 'I' then substr(StrList,4,1)
    else substr(StrList,5,1) end as temp from table1
    when substr(StrList,2,1) = 'B' or substr(StrList,2,1) = 'I' then substr(StrList,1,1)
    else substr(StrList,1,2) end as temp 并且选出来的substr等于 sxID   // 能用类似的方法表达吗?汉字部分怎么能用代码实现呢
      

  2.   

    String sxID = "D"select id, name from table2 where id in(
    select case
    when substr(StrList,2,1) = 'B' or substr(StrList,2,1) = 'I' then substr(StrList,4,1)
    else substr(StrList,5,1) end  from table1 WHERE
    when substr(StrList,2,1) = 'B' or substr(StrList,2,1) = 'I' then substr(StrList,1,1)
    else substr(StrList,1,2) end LIKE '"+sxID+"'
    ) 这样只能选出一条符合条件的,不能罗列出所有该怎么改进呢