2016-05-01 7 views
-5

ich zwei Tabellen anschließen möchten Tabelle 1 hat 4 columns-beitreten Tabellen ohne gemeinsame Spalte aber mit Bereich Formel bezogen

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

Tabelle 2 hat 3 columns-

Low High Frequency 
1 50 Weekly 
51 150 Monthly 

Hier, ich habe um die Häufigkeit basierend auf dem Low- und High-Bereich zu melden, der End_datum-Startdatum ist. Wie schließe ich mich diesen beiden an? Ich kann es nicht herausfinden. Danke im Voraus!

+0

Ist '1' niedrig und' 50' hoch waren Tagesunterschiede zwischen zwei Daten? –

+0

Auch ** TAG ** das 'DBMS', das Sie verwenden, da die Abfrage' DATE'-Funktionen erfordert, die sich bei jedem Anbieter unterscheiden –

+0

"Ist 1 niedrig und 50 hoch waren die Tage zwischen zwei Daten?" JA und es ist Oracle. – Geet

Antwort

0

Wie wäre es damit:

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

Danke, aber das geht nicht. Komplet neu zu SQL. – Geet

+0

Die DATEDIFF-Funktion ist spezifisch für SQL Server. Ich bin sicher, dass Sie nur das Oracle-Äquivalent finden müssen. – cChacon

0

Oracle-Setup:

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 ; 

Abfrage:

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

Ausgang:

 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  
Verwandte Themen