MS Access 2003: проверьте, находятся ли данные в пределах диапазона от другой таблицы - PullRequest
1 голос
/ 25 января 2011

У меня есть две таблицы: Таблица A с часами и Таблица B с оценкой и минимальным необходимым часом

Я пытаюсь назначить TableB.Grade для TableA в зависимости от того, сколько часов у каждой записи.

Пример:

TableA

Name        Hours       
Person A     205
Person B     105
Person C     400

Таблица B

Grade       HoursRequired
1              0
2              100
3              200
4              300

Мой ожидаемый отчет

Name      Hours     Grade
Person A    105     2
Person B    205     3
Person C    400     4

Буду признателен за любые рекомендации по кодированию SQL или реструктуризации таблицы.

Ответы [ 2 ]

1 голос
/ 25 января 2011

Вы можете использовать подзапрос:

select  A.Name
,       A.Hours
,       (
        select  top 1 grade 
        from    TableB B 
        where   B.HoursRequired <= A.Hours 
        order by 
                B.HoursRequired DESC
        ) as Grade
from    TableA A
0 голосов
/ 25 января 2011

Мне нравится предложение @ Andomar.Однако, если подзапросы вас смущают, вы можете изменить TableB следующим образом:

Grade low_end   high_end
1           0         99
2         100        199
3         200        299
4         300 2147483647

Затем использовать этот запрос:

SELECT a.person_name, a.hours, b.Grade
FROM TableA AS a, TableB AS b
WHERE (((a.hours) Between [b].[low_end] And [b].[high_end]))
ORDER BY a.person_name;

Name - зарезервированное слово, поэтому я переименовал ваше поле Nameк персонажу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...