2016-05-01 17 views
-5

範囲式に関連 表1が有する4 columns-が共通の列なしでテーブルを結合するが、私は、2つのテーブルを結合する

ID Name Start_Date End_date 
1 John 20/dec/0009 15/Sep/0010 

表2は、私は、ここでは3 columns-

Low High Frequency 
1 50 Weekly 
51 150 Monthly 

を有しますEnd_date-start_dateであるLowとHighの範囲に基づいて頻度を報告します。どのように私はこれら2つに参加するのですか? 理解できません。前もって感謝します!

+0

「1」が低く、「50」が高かったのは2つの日付の日数の差ですか? –

+0

** TAG **クエリには、ベンダーごとに異なるDATE関数が必要なため、使用しているDBMSは –

+0

です。「1日のうち最低日と最高日は50日間で違いますか?はい、オラクルです。 – Geet

答えて

0

これはどう:

SELECT Table1.ID, Table1.Name, Table2.Frequency 
FROM Table1 
    JOIN Table2 ON 
    Table2.Low >= DateDiff(d, Table1.End_Date, Table1.Start_Date) AND 
    Table2.High < DateDiff(d, Table1.End_Date, Table1.Start_Date) 
+0

ありがとうございますが、これはうまくいきません。 SQLを完全に新しくしました。 – Geet

+0

DATEDIFF関数はSQL Server固有の機能です。私はあなたがオラクルの同等のものを見つける必要があると確信しています。 – cChacon

0

Oracleのセットアップ

CREATE TABLE table1 (ID, Name, Start_Date, End_date) AS 
SELECT 1, 'John', DATE '0009-12-20', DATE '0010-09-15' FROM DUAL; 

CREATE TABLE Table2 (Low, High, Frequency) AS 
SELECT 1, 50, 'Weekly' FROM DUAL UNION ALL 
SELECT 51, 150, 'Monthly' FROM DUAL UNION ALL 
SELECT 151, 730, 'Yearly' FROM DUAL ; 

クエリ

SELECT * 
FROM table1 t1 
     INNER JOIN 
     table2 t2 
     ON (end_date - start_date BETWEEN LOW AND HIGH); 

出力

 ID NAME START_DATE   END_DATE     LOW  HIGH FREQUENCY 
---------- ---- ------------------- ------------------- ---------- ---------- --------- 
     1 John 0009-12-20 00:00:00 0010-09-15 00:00:00  151  730 Yearly  
関連する問題