# 两个基本相同的字段比较后，联合查询~再线等解决办法

www.myexceptions.net  网友分享于：2013-01-25  浏览：13次

TAB1 （4千多条数据）
BH SL
6W801 10
5W6801 20
2W7011 15
3W652 11
。。。

TAB2 （ 1万多条数据 ）
BH ZL
6W801-A-JB 6
5W6801-SH 5.5
2W7011-X 8
3W652-C 9
。。。

BH SL ZL
6W801 10 6
5W6801_ 20 5.5
3W652 11 9

------解决方案--------------------
SQL code
```create table A(BH varchar(20),SL decimal(18,1))
insert into A values('6W801' ,        10 )
insert into A values('5W6801',        20 )
insert into A values('2W7011',        15 )
insert into A values('3W652' ,        11 )
create table B(BH varchar(20),SL decimal(18,1))
insert into B values('6W801-A-JB',    6  )
insert into B values('5W6801-SH' ,    5.5)
insert into B values('2W7011-X'  ,    8  )
insert into B values('3W652-C'   ,    9  )
go
select a.bh , a.sl asl,b.sl as bsl from a,b
where (a.bh = b.bh) or (a.bh = left(b.bh,charindex('-',b.bh)-1) and charindex('-',b.bh) > 0)
drop table A,B

/*
bh                   asl                  bsl
-------------------- -------------------- --------------------
6W801                10.0                 6.0
5W6801               20.0                 5.5
2W7011               15.0                 8.0
3W652                11.0                 9.0

（所影响的行数为 4 行）
*/
------解决方案--------------------create table t1                    (BH  varchar(10)      ,     SL   int      )insert into t1select '6W801' ,        10 union all  select '5W6801',        20 union all  select '2W7011',        15 union allselect '3W652' ,        11  create table t2                 (BH  varchar(100),            ZL         numeric(10,2))insert into t2select '6W801-A-JB',     6  union allselect '5W6801-SH' ,    5.5 union all  select '2W7011-X'  ,    8   union allselect '3W652-C'   ,    9  select a.* ,b.* fromt1 a join t2 bon a.BH=LEFT(b.BH,charindex('-',b.BH)-1)BH         SL          BH                                                                                                   ZL          ---------- ----------- ---------------------------------------------------------------- ------------  6W801      10          6W801-A-JB                                                                                           6.005W6801     20          5W6801-SH                                                                                            5.502W7011     15          2W7011-X                                                                                             8.003W652      11          3W652-C                                                                                              9.00（所影响的行数为 4 行）
------解决方案-------------------- SELECT TAB1.BH,TAB1.SL,TAB2.ZL FROM TAB1 JOIN TAB2 ON CHARINDEX(TAB1.BH,TAB2.BH)>0  WHERE LTRIM(TAB2.BH,LEN(TAB1.BH)) IN ('-A','-JB','-SH','-C','-A-JB')----没测试过，让您见笑了```