2016-05-16 4 views
-1

Wenn ich die folgende Datenbankstruktur haben:SQL auf Nächste beitreten größer als der Wert

tbl1

|id  | EYearMonth  | 
| 1  |  1617   | 
| 2  |  1618   | 
| 3  |  1619   | 
| 4  |  1620   |  
| 5  |  1621   | 
| 6  |  1622   | 
| 7  |  1623   | 
| 8  |  1624   | 
| 9  |  1625   | 
| 10  |  1626   | 
| 11  |  1627   | 
| 12  |  1628   | 

tbl2

|id  | Value   | Serial# 
| 1  |  1617   | 1068 
| 2  |  1618   | 1104 
| 3  |  1624   | 1215 

Was ich wirklich will, ist folgendes:

Ergebnis

|id  | EYearMonth  | Serial# 
| 1  |  1617   | 1068 
| 2  |  1618   | 1104 
| 3  |  1619   | 1104 
| 4  |  1620   | 1104 
| 5  |  1621   | 1104 
| 6  |  1622   | 1104 
| 7  |  1623   | 1104 
| 8  |  1624   | 1215 
| 9  |  1625   | 1215 
| 10  |  1626   | 1215 
| 11  |  1627   | 1215 
| 12  |  1628   | 1215 

Wie kann ich dieses Ergebnis erzielen? Bitte helfen Sie mir

Antwort

0

Sie CROSS APPLY und TOP für diese verwenden:

SELECT * 
FROM tbl1 t1 
CROSS APPLY(
    SELECT TOP 1 t2.[Serial#] 
    FROM tbl2 t2 
    WHERE t2.Value <= t1.EYearMonth 
    ORDER BY t2.Value DESC 
)t2 

ONLINE DEMO

+0

denke ich, dass sein sollte 'ORDER BY t2.value DESC', da es keine Garantie gibt, dass die Serien diesem patchen folgen werden :) – sagi

+0

@sagi, yup! Danke nochmal für das Speichern meiner a **. Muss Zeit sein, um sich auszuruhen. –

+0

Ich habe diesen Code versucht, aber der Wert von Serial # Column im Ergebnis tbl ist gleich 1215 –

0

Die folgende Abfrage funktioniert:

SELECT 
    T1.id, 
    T1.EYearMonth, 
    T2.Serial# 
FROM tbl1 T1 
INNER JOIN Tbl2 T2 
    ON tbl1.EYearMonth = Tbl2.Value