#sql #ms-access
#sql #ms-access
Вопрос:
У меня есть две таблицы — список клиентов с общим рядом с ними, у них также есть столбец типа и запись состояния.
Например
CustomerName, TotalOR, Type, Status
Customer 1, 205, P, Maint
Customer 2, 199, S, Maint
и вторая таблица с подробной информацией о сервисном диапазоне, в который они попадают.
Band, Type, Status, TotalORFrom, TotalORTo
B1, P, Maint, 1, 199
B2, P, Maint, 199, 300
B3, S, Maint, 1, 199
Что я хочу иметь возможность делать, так это возвращать диапазон для каждого клиента на основе общего количества клиентов, типа и статуса.
Я попытался создать несколько запросов, которые я могу заставить возвращать все возможные диапазоны, но не конкретный диапазон. Любая помощь была бы очень признательна.
Спасибо
Ответ №1:
Предполагая, что первая таблица customer
, а вторая таблица band
:
SELECT band
FROM customer c
JOIN band b ON c.Type = b.Type
AND c.Status = b.Status
AND (c.TotalOR = b.TotalORFrom OR c.TotalOR = b.TotalORTo)
Редактировать: я не могу сказать, пытаетесь ли вы присоединиться на основе TotalORFrom
или TotalORTo
, поэтому этот запрос присоединяется на основе того, что оба они одинаковы.
Правка 2: Основываясь на вашем комментарии, вот новый запрос, который гарантирует, что customer.TotalOR
больше или равно band.TotalORFrom
и customer.TotalOR
меньше или равно band.TotalORTo
.
SELECT band
FROM customer c
JOIN band b ON c.Type = b.Type
AND c.Status = b.Status
AND c.TotalOR BETWEEN b.TotalORFrom AND b.TotalORTo
ОБНОВЛЕНИЕ: похоже, что приведенное выше приводит к перекрытию B1
и B2
at 199
для P, Maint
. Рассмотрите эту альтернативу, чтобы устранить перекрытие:
SELECT band
FROM customer c
JOIN band b ON c.Type = b.Type
AND c.Status = b.Status
AND c.TotalOR >= b.TotalORFrom
AND c.TotalOR < b.TotalORTo;
Комментарии:
1. Извините, я пытаюсь присоединиться на основе того, попадает ли значение между диапазоном в TotalORFrom и TotalORTo. Например, в моей таблице customer клиент 1 будет находиться в диапазоне b2, а клиент 2 — в диапазоне b3.
2. Всегда пожалуйста. Пожалуйста, отметьте ответ как правильный, чтобы другие знали, что вопрос решен. Спасибо.
3. На мой взгляд, это привело бы к перекрытию
B1
иB2
at199
дляP, Maint
. Смотрите редактирование вопроса, было слишком длинным для одних комментариев 😉4. Я не согласен с перекрытием, но в OP не указано, что перекрытие является плохим. Мы не знаем, какой из концов должен включать (TO? Откуда? оба? ни то, ни другое?). Я предположил, что они оба были всеобъемлющими.