1、TABLE1和TABLE2的关联关系为:TABLE1 left join TABLE2 on TABLE1.WELL_ID = TABLE2.JH
2、以TABLE1第一条记录为例:依次扫描199806的JH1的8个WELL_ID字段(WELL_ID1、WELL_ID2 … WELL_ID8),
例如,WELL_ID1在TABLE2的8个DBJH列中遍历查找,如存在匹配的DBJH列,则将对应的LTCH列和LTLB列的值取出。
如果不存在,则该WELL_ID1为空,LTCH列和LTLB列也为空。
3、如果 JH1的8个WELL_ID字段在TABLE2中都没找到匹配的,则该WELL_ID1取值无需出现多行。现在我写的sql比较烂,而且第3点未能实现。请大家帮忙,多谢。
select 
a.well_id,a.year_mon,b.ltxh,b.xcxh,b.yczmc,b.xch,
decode(a.well_id1,b.dbjh1,b.dbjh1,b.dbjh2,b.dbjh2,b.dbjh3,b.dbjh3,b.dbjh4,b.dbjh4,b.dbjh5,b.dbjh5,b.dbjh6,b.dbjh6,b.dbjh7,b.dbjh7,b.dbjh8,b.dbjh8) well_id1,
decode(a.well_id1,b.dbjh1,b.ltch1,b.dbjh2,b.ltch2,b.dbjh3,b.ltch3,b.dbjh4,b.ltch4,b.dbjh5,b.ltch5,b.dbjh6,b.ltch6,b.dbjh7,b.ltch7,b.dbjh8,b.ltch8) ltch1,
decode(a.well_id1,b.dbjh1,b.ltlb1,b.dbjh2,b.ltlb2,b.dbjh3,b.ltlb3,b.dbjh4,b.ltlb4,b.dbjh5,b.ltlb5,b.dbjh6,b.ltlb6,b.dbjh7,b.ltlb7,b.dbjh8,b.ltlb8) ltlb1,decode(a.well_id2,b.dbjh1,b.dbjh1,b.dbjh2,b.dbjh2,b.dbjh3,b.dbjh3,b.dbjh4,b.dbjh4,b.dbjh5,b.dbjh5,b.dbjh6,b.dbjh6,b.dbjh7,b.dbjh7,b.dbjh8,b.dbjh8) well_id2,
decode(a.well_id2,b.dbjh1,b.ltch1,b.dbjh2,b.ltch2,b.dbjh3,b.ltch3,b.dbjh4,b.ltch4,b.dbjh5,b.ltch5,b.dbjh6,b.ltch6,b.dbjh7,b.ltch7,b.dbjh8,b.ltch8) ltch2,
decode(a.well_id2,b.dbjh1,b.ltlb1,b.dbjh2,b.ltlb2,b.dbjh3,b.ltlb3,b.dbjh4,b.ltlb4,b.dbjh5,b.ltlb5,b.dbjh6,b.ltlb6,b.dbjh7,b.ltlb7,b.dbjh8,b.ltlb8) ltlb2
.......判断语句块重复8次from xx_zrjjz a left join xx_daa051_daa052 b on a.well_id = b.jh 
order by a.well_id,a.year_mon

解决方案 »

  1.   

    你的sql是否不全啊?
    把你的全部sql写出来,我们再看!
      

  2.   

    Table1如下:
    WELL_ID YEAR_MON WELL_ID1 WELL_ID2 WELL_ID3 WELL_ID4 WELL_ID5 WELL_ID6 WELL_ID7 WELL_ID8
    jh1 199806    jh4     jh2      jh3       jh8     jh7 ............. 
    jh1 199803    jh5     jh6       ................................ Table2如下:DBJH 、LTCH、LTLB列都有8列,空间有限故省略
    JH LTXH XCXH YCZMC XCH  XFCH      DBJH1   LTCH1   LTLB1   DBJH2   LTCH2  LTLB2 ...
    jh1 1 1 P1 21 jh2 21 G jh3 21 G
    jh1 1 2 P1 22 jh2 22 G jh3 22 G
    jh1 1 3 P1 3 jh2 N jh3 3 G
    jh1 1 4 P1 41*1 jh2 41 jh3 0
    jh1 1 5 P1 41*2 jh2 N jh3 N
    jh1 1 6 P1 42-51 jh2 42 G jh3 42 G1、两表通过WELL_ID和JH 2列关联:  Table1 left join Table2 on Table1.WELL_ID = Table2.JH 2、依次扫描TABLE1的8列WELL_ID1,WELL_ID2....WELL_ID8,在TABLE2的8列DBJH1,DBJH2...DBJH8中查找.如存在匹配值,则将对应的LTCH列和LTLB列的值取出。
    如不存在,则该WELL_ID1(或WELL_ID2....WELL_ID8)为空,LTCH列和LTLB列也为空3、步骤2中的操作完成后,如果WELL_ID1....WELL_ID8的值全为空.则该WELL_ID的ltch,xcxh,yczmc,xch值也为空. 如楼主图中蓝色部分的ltch,xcxh,yczmc,xch 4列 值为空,并且4条记录去重复。
      

  3.   

    在描述一下需求,希望能让大家明白。1、Table1左关联Table2 : TABLE1 left join TABLE2 on TABLE1.WELL_ID = TABLE2.JH 2、扫描Table1的WELL_ID1,将WELL_ID1和Table2的DBJH1、DBJH2......DBJH8依次对比。 
        如WELL_ID1值等于某列DBJH,则取出该DBJH列对应的LTCH列和LTLB列。
        如WELL_ID1值不等于任何一列DBJH,则WELL_ID1值为空,LTCH和LTLB两列的值也为空。
        上述操作执行8次(WELL_ID1、WELL_ID2....WELL_ID8)3、对于2的结果,如果WELL_ID1、WELL_ID2....WELL_ID8的值均为空.则WELL_ID对应的LTXH、XCXH、YCZMC、XCH、YFCH4列的值为空。