2017-01-09 4 views
0

Не могли бы вы, ребята, предоставить мне следующую ситуацию: У меня есть 2 стола.Создание объединений на основе диапазона числового значения

Таблица 1 выглядит следующим образом: enter image description here

Между тем, это таблица 2:

enter image description here

Я хотел бы присоединиться к таблице 2 в таблице 1, для поиска ранг для каждого задания на основе в верхнем и нижнем предельных столбцах.

К концептуализации некоторые из прекрасных ответов здесь, мне удалось придумать заявление, которое выглядит примерно так:

FROM table2 LEFT JOIN table1 ON (table2.[score] >= table1.[lower limit]) AND (table2.[score] <= table1.[upper limit]) 

Заявление выше удается присоединиться к ним в соответствии с диапазоном, однако, для некоторых неизвестные причины, некоторые строки из левой таблицы пропали, и я не мог определить, что это такое. например, 2000 строк в таблице 2, но только 1800 в запросе)

Я уверен, что соединение является причиной, как если бы я изменил соединение на равное левое соединение, в запросе появятся 2000 строк.

Может кто-нибудь посоветует мне об этом?

С уважением, Гуан Yong

+0

У вас есть дробные оценки, которые падают между классами - т.е. между 59 и 60? Или пустые оценки, оценки <0 or > 100? Я думаю, что ваше объединение может исключить эти баллы - хотя я ожидал бы, что левое объединение приведет все записи в результат. –

ответ

0

Возможно, было бы намного чище, чтобы создать таблицу со значениями 1-100 и назначить их каждый на ваших категорий, и по существу зеркальное отображение таблицу 1. Затем вы можете сделать Таблица 2

SELECT Table1.Grade, Table2.Score 
FROM Table2 LEFT JOIN Table1 ON Table2.Score = Table1.Score 

Это, безусловно, охватывает все целые числа от 0 до 100.

Если вы вручную inputing баллов, вы также можете использовать макрос данных так просто, как это: пойти Таблица Инструменты >> Таблица >> До изменения

Затем используйте Set Field Действие и установить

Name = Table2.Grade

Значение = IIf([Score]>=70,"Good",IIf([Score]<=59,"bad","so so"))

С это^каждый раз, когда вы вводите счет, он автоматически заполняет колонку класса.

Другой вариант заключается в создании запроса следующим образом, что будет оценивать каждую строку и назначить правильную оценку:

SELECT Table2.Score, 
IIf([Score]>=70,"Good",IIf([Score]<=59,"bad","so so")) AS Grade 
FROM Table2; 

Удачи!