SQL-запрос для возврата значения на основе данных в диапазоне

#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 at 199 для P, Maint . Смотрите редактирование вопроса, было слишком длинным для одних комментариев 😉

4. Я не согласен с перекрытием, но в OP не указано, что перекрытие является плохим. Мы не знаем, какой из концов должен включать (TO? Откуда? оба? ни то, ни другое?). Я предположил, что они оба были всеобъемлющими.