2016-09-08 2 views
1

に参加:基本的に私は2つのテーブル持っているオプションの

Result 
Bus_Stream Office_ID GroupID TypeID SubgroupID Bus_Limit 
ABC   1   20  21  7   50 
ABC   2   15  12  21   100 
XYZ   3   (null) 17  3   120 

が、私はに基づいてTable1.Crit_Valueに参加する必要があります:私はそれを結合を作成する必要が

Table1 - Criteria 
Office_ID Bus_Stream Bus_Criteria Crit_Value 
1   ABC   0    20 
1   ABC   1    21 
1   ABC   2    7 
2   ABC   0    15 
2   ABC   1    12 
2   ABC   2    21 
3   XYZ   1    17 
3   XYZ   2    3 


Table2 - Limit 
Bus_Stream GroupID TypeID SubgroupID Bus_Limit 
ABC   20  21  7   50 
ABC   15  12  21   100 
XYZ   99  17  3   120 

は私に引き戻すことができます次:1またはBus_Criteriaから0/1/2の値の2場合は不足していると付け加えた合併症と

Table1.Bus_Criteria Table2 
0      GroupID 
1      TypeID 
2      SubGroupID 

、まだ意志合流します残りの基準で発生する。

私は、AND/ORの組み合わせを無駄に使用しようとしました。

アイデアの皆様?

+0

「外部左結合」を試しましたか? – FDavidov

+0

* Bus_Criteriaの0/1/2の値がない場合、他の2つの基準でも結合が行われます。*:わかりません。他にどんな基準がありますか? – sstan

+2

おそらく、あなたはjoinについてcase文を使う必要があります。 – xQbert

答えて

3

これは、あなたが後にしていることかもしれません..結合のcase文を使用します。

ここでの問題は、t2のデータが正規化されていないことです。また、t2の3つのデータ列をピボット解除して、結合がより自然になるようにすることもできます。

SELECT T2.Bus_Stream, T1.Office_ID, T2.GroupID, T2.TypeID, T2.SubGroupId, T2.bus_Limit 
FROM T1 
INNER JOIN T2 
on T1.Bus_Stream = T2.Bus_Stream 
and T1.Crit_value = case when T1.Bus_Critiera = 0 then T2.GroupID 
         when T1.Bus_Critiera = 1 then T2.TypeID 
         when T1.Bus_Critiera = 2 then T2.SubGroupID 
        end 
1

あなたはこれを試しましたか?

SELECT 
t1.*, t2.* 
FROM Table1 t1 
INNER JOIN Table2 t2 ON 
    t1.Bus_Stream = t2.Bus_Stream AND 
    CASE 
     WHEN t1.Bus_Criteria = 0 
      THEN t2.GroupID = t1.Crit_Value 
     WHEN t1.Bus_Criteria = 1 
      THEN t2.TypeID = t1.Crit_Value 
     ELSE 
      t2.SubGroupID = t1.Crit_Value 
    END 
関連する問題