select * from A 
order by 工事CD
  ,case when exists(select 1 from B where 参加公司1=A.公司CD) then 1
        when exists(select 1 from B where 参加公司2=A.公司CD) then 2
        when exists(select 1 from B where 参加公司3=A.公司CD) then 3
        when exists(select 1 from B where 参加公司4=A.公司CD) then 4
        else 5 
    end

解决方案 »

  1.   

    我的sql要在oracle中运行,不能用case when这类语句。
    通常的sql语句都能执行,还有没有办法?
      

  2.   

    select * from A 
    order by 工事CD
      ,charindex(','+A.公司CD+',' , (select ','+参加公司1+','+参加公司2+','+参加公司3+','+参加公司4+','+参加公司5+',' from B where 工事CD=A.工事CD))
      

  3.   

    Select a.* from A表 a,B表 b where a.工事CD=b.工事CD Order by 
     a.工事CD,Charindex(a.公司CD,b.参加公司1+b.参加公司2+b.参加公司3+b.参加公司4+b.参加公司5)
      

  4.   

    Select a.* from A表 a,B表 b where a.工事CD=b.工事CD Order by 
     a.工事CD,Charindex(','+a.公司CD+',',','+b.参加公司1+','+b.参加公司2+','+b.参加公司3+','+b.参加公司4+','+b.参加公司5+',')
      

  5.   

    select 工事CD, 公司CD from (
    select A.工事CD, A.公司CD,
    DECODE(A.公司CD, b.参加公司1, 1, b.参加公司2, 2,
    b.参加公司3, 3, b.参加公司4, 4,
    b.参加公司5, 5, 6 ) num     
    from A
    left join
    B
    on a.工事CD=b.工事CD) C order by num
      

  6.   

    改成Left Join就对了.
    Select a.* from A表 a left join B表 b on a.工事CD=b.工事CD Order by 
     a.工事CD,Charindex(','+a.公司CD+',',','+b.参加公司1+','+b.参加公司2+','+b.参加公司3+','+b.参加公司4+','+b.参加公司5+',')
      

  7.   

    Select a.* from A表 a left join B表 b on a.工事CD=b.工事CD Order by 
     a.工事CD,Charindex(','+a.公司CD+',',','+b.参加公司1+','+b.参加公司2+','+b.参加公司3+','+b.参加公司4+','+b.参加公司5+',')