Запрос MSAccess для поиска по списку критериев в таблице данных - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь составить список скидок на товары. У меня есть главная таблица, которая содержит условия:

ID  Connection  Class           Discount
1   (B OR F)    150             0.1
2   B           (600 OR 900)    0.2
3   F           (1500 OR 2500)  0.3
4   (C OR F)    4500            0.25

Запрос, который я пытаюсь сделать, выглядит примерно так:

SELECT Constraints.Discount
FROM Constraints
WHERE ((('600')=[Class]));

В приведенном выше примере должна возвращаться строка 2. Как это можно сделать? Нужно ли форматировать мои условия другим способом? Я попробовал этот пример и не смог получить желаемый результат. Идея состоит в том, чтобы создать несколько столбцов ограничений, и в зависимости от выбранной конфигурации я хотел бы сузить выбор правильной скидки.

Пожалуйста, дайте мне знать, если есть более простой способ решить эту проблему.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Как сказал @Minty в комментарии, ваши данные не нормализованы. Если вы разделите Connection и Class, чтобы они содержали только одно значение, вы могли бы легко получить данные обратно.

| ID | Connection | Class | Discount |
|----|------------|-------|----------|
| 1  | B          | 150   | 0.1      |
| 1  | F          | 150   | 0.1      |
| 2  | B          | 600   | 0.2      |
| 2  | B          | 900   | 0.2      |
| 3  | F          | 1500  | 0.3      |
| 3  | F          | 2500  | 0.3      |
| 4  | C          | 4500  | 0.25     |
| 4  | F          | 4500  | 0.25     | 

Этот SQL вернет 0,2:

SELECT  Discount
FROM    Constraints
WHERE   Class = 600  

Полагаю, вам нужно будет ввести Connection, поскольку сам по себе класс вернет дубликаты записей (если только вы не группируете по Discount на основе данных выборки).

Так что либо:

SELECT  Discount
FROM    Table2
WHERE   Connection = 'B' AND Class = 600  

или

SELECT  Discount
FROM    Table2
WHERE   Class = 150
GROUP BY Discount  

Редактировать: < ID, Connection, Class > может составить составную Primary Key в таблице.

0 голосов
/ 09 ноября 2018

Какой тип данных является столбцом класса. Если это число, попробуйте следующий запрос:

SELECT Constraints.Discount
FROM Constraints
WHERE [Class] = 600

'600' - строковая константа, которая содержит 3 символа 6, 0 и 0 - это отличается от числового значения 600

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