2016-05-16 2 views
-1

Если я иметь следующую структуру базы данных:SQL JOIN на ближняя больше, чем значение

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 

То, что я действительно хочу, заключается в следующем:

|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 

Как это сделать? Пожалуйста, помогите мне

ответ

0

Вы можете использовать CROSS APPLY и TOP для этого:

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

Я думаю, что должно быть 'ORDER BY t2.value DESC', так как нет гарантии, что сериалы последуют за этим pathern :) – sagi

+0

@sagi, yup! Еще раз спасибо за сохранение моего **. Должно быть, время для отдыха. –

+0

Я пробовал этот код, но значение Serial # Column в результате tbl равняется 1215 –

0

Следующий запрос будет работать:

SELECT 
    T1.id, 
    T1.EYearMonth, 
    T2.Serial# 
FROM tbl1 T1 
INNER JOIN Tbl2 T2 
    ON tbl1.EYearMonth = Tbl2.Value 
Смежные вопросы