-1

私はSQLServer2008を実行しようとしている開発者であり、行き詰まっています。

私は次の2つのテーブルを持っています

表1

Local Area   | ManagerID  
 ABC-SDF-LKJ | 1234  
 ABC-KJH-GHJ | 4321  
 XZY-TRS-YEU | 4321  
 XZY-BFG-GFH | 6789  
 INT-HSL-DSL | 6789  

表2

Region | ManagerID  
 ABC   | 4321  
 INT   | 5764  
 XZY   | 8647

のすべての行を返すクエリを作成する必要がありますManagerId。がテーブル2に存在する場合はManagerId、それらがマネージャーであるテーブル1のすべての行と、マネージャーであるリージョンで始まるテーブル1のすべての行を返す必要があります。

上記のデータを考えるとManagerId = 4321

ABC-SDF-LKJ  
ABC-KJH-GHJ  
XZY-TRS-YEU  

ManagerId = 8647戻る必要があります が

XZY-BFG-GFH  
XZY-TRS-YEU  

そしてManagerId = 1234戻る必要があります

ABC-SDF-LKJ  

誰かがこれを行う方法を知っていますか?

4

2 に答える 2

2

JOIN任意の式にすることができ、ではなく、LIKEを使用しますLEFT([Local Area], 3)。はLEFT JOIN、、にリストされているリージョンを返しTable2ます。の条件は、の条件のように、に一致しないt1.ManagerId = xxxx値を返します。Table1Table2ManagerID = 1234

SELECT
  [Local Area]
FROM
  Table1 t1
  -- Matches the Region back to the Local Area
  LEFT JOIN Table2 T2 ON LEFT(t1.[Local Area], 3) = t2.Region
WHERE
  -- For those which have no Region match in Table2
  t1.ManagerId = 1234
  -- And to get the Table1 records which start with the Region from Table2
  OR t2.ManagerId = 1234

これがデモンストレーションです:http ://sqlfiddle.com/#!3/ca497/4

于 2013-03-10T23:18:08.377 に答える
1

これはどう:

SELECT *
FROM Table1 T1, Table2 T2
WHERE T1.ManagerID = T2.ManagerID 
OR T1.[Local Area] LIKE T2.Region + '%'

最初の条件は同じマネージャーを処理し、2番目の条件は地域/エリアを処理します。

ここでSQLフィドル。

于 2013-03-10T23:23:26.177 に答える