Как создать исключение в SQL-запросе (доступ к Excel)

#sql #excel #ms-access #vba

#sql #excel #ms-доступ #vba

Вопрос:

Я беру некоторые данные из таблицы Access на рабочий лист Excel, и они зависят от некоторых параметров. Мой список данных в таблице access включает, например:

 1-x branch
2-y branch
3-z branch
4-t commercial branch
5-r commercial branch
6-w corporate branch
7-g corporate branch
 

В Excel VBA, если я хочу получить все свои данные, я создаю SQL-запрос типа:

 sql = "select * from [table] where [Branches] like "%"
 

если я хочу получить только данные коммерческих филиалов:

 sql = "select * from [table] where [Branches] like '%" amp; "commercial" amp; "%'"
 

и если я хочу получить только данные корпоративного филиала:

 sql = "select * from [table] where [Branches] like '%" amp; "corporate" amp; "%'"
 

и вот вопрос. Что мне нужно делать, если я хочу получить данные, кроме корпоративных и коммерческих филиалов? Какой SQL-запрос мы можем создать?

Большое спасибо.


Это моя ошибка, я мог бы объяснить более понятно. Перед созданием запроса я использую свои параметры следующим образом:

 Select Case main.Range("D6").Value
Case "ALL"
brnch = "%"
Case "CORPORATE"
brnch = "%" amp; "CORPORATE" amp; "%"
Case "COMMERCIAL"
brnch = "%" amp; "COMMERCIAL" amp; "%"
End Select
 

и мой запрос на самом деле такой:

 sql = "select * from [table] where [Branches] like '" amp; brnch amp; "'"
 

теперь, что я могу сделать, чтобы получить филиалы без рекламы и корпораций.

Комментарии:

1. Запрос Гордона сработает. Однако, запрашивая данные, как вы делаете, ища определенные ключевые слова в названии каждой ветки … это становится уродливым, медленным и потенциально неточным. Есть ли какой-либо шанс, что вы могли бы добавить в эту таблицу столбец integer, который указывает тип ветви, к которой относится каждая сущность? 1 = Branch, 2 = CommercialBranch, 3 = CorporateBranch . Тогда фильтрация вашего запроса становится тривиальной: WHERE [Table].[BranchCategoryId] IN(1, 2) И WHERE [Table].[BranchCategoryId] NOT IN(2, 3)

2. это было бы хорошо, но, к сожалению, я не могу. Это довольно старая база данных, и некоторые другие книги Excel работают с этой базой данных.

3. Значит, в вашей ячейке Excel , main.Range("D6").Value , не будет записей для коммерческих и корпоративных пользователей?

4. Я получил запись типа «Другие», чтобы не выбирать рекламные ролики и корпорации. Но я не знаю, как создать правильный запрос.

Ответ №1:

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

 sql = "select * from [table] where Branches not like '%corporate%' and branches not like '%commercial%'";
 

Если вы хотите запустить этот код в MS Access, подстановочные знаки будут другими, а разделителем строк будет двойная кавычка:

 sql = "select * from [table] where Branches not like ""*corporate*"" and branches not like ""*commercial*""";
 

Комментарии:

1. Большое вам спасибо, но я внес дополнение к своей проблеме ниже.