#sql #ms-access #case
#sql #ms-access #вариант
Вопрос:
SELECT
CASE Forms!FormName!ComboBox
WHEN Is Not Null THEN (ParentTable.Column)
FROM (Parent)
WHERE (((ParentTable.Column)=Forms!FormName!ComboBox))
ELSE
((ParentTable.Column) FROM Parent END;
Хорошо, у меня есть форма, которая отображает записи из родительской таблицы, и я хочу иметь возможность фильтровать ее. Итак, чего пытается достичь приведенный выше код SQL, так это сказать, что если в поле со списком сделан выбор, то выбираются только записи, соответствующие этому полю. Другой случай заключается в том, что поле равно null, и оно просто выбирает все записи. Я не очень хорошо знаком с кодом SQL, поэтому, пожалуйста, объясните различные используемые параметры, если это возможно.
Или возможно, что я мог бы использовать какой-то оператор if вместо этого?
Комментарии:
1. Какая реализация
SQL
? Oracle, Sql server, MySQL, PostGres?2. Этот SQL выглядит сломанным. По крайней мере, отсутствуют и дублируются скобки.
3. я использую sql в Microsoft Access
4. Вы не используете этот SQL в Access, поскольку в диалекте SQL Jet / ACE нет РЕГИСТРА / WHEN / ELSE.
Ответ №1:
Вы не можете использовать параметры формы непосредственно в SQL. Вы можете параметризовать свой запрос и передать параметр, назовем его @formName:
select
case
when @FormName is not null then ParentTable.column1
else ParentTable.column2
end
from ParentTable
where ParentTable.column3 = @FormName
Комментарии:
1. что для этого делает @? это личное обозначение или оно включено в код?
2. Вот как вы записываете параметры в sql:
declare @myParam int
: social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread /…
Ответ №2:
Похоже, РЕГИСТР здесь не нужен:
SELECT ParentTable.Column
FROM ParentTable
WHERE (Forms!FormName!ComboBox IS NULL)
OR (Forms!FormName!ComboBox = ParentTable.Column)
Ответ №3:
ПРИМЕЧАНИЕ: Я предполагаю, что вы привязываете значение Forms!formName!Параметр ComboBox динамически.
Для MS Access
SELECT <YOUR_SELECT_LIST>
FROM ParentTable
WHERE NZ(Forms!FormName!ComboBox, ParentTable.Column) = ParentTable.Column
Для SQL Server
SELECT <YOUR_SELECT_LIST>
FROM ParentTable
WHERE ISNULL(Forms!FormName!ComboBox, ParentTable.Column) = ParentTable.Column
Для ORACLE
SELECT <YOUR_SELECT_LIST>
FROM ParentTable
WHERE NVL(Forms!FormName!ComboBox, ParentTable.Column) = ParentTable.Column
Комментарии:
1. Я использую sql в Microsoft access. что это за вариант?
2. Также я не знаю, что вы подразумеваете под динамической привязкой значения. Прошу прощения за то, что был бесполезен. Если значение combobox равно null, мне нужны все записи в parenttable.column, а в противном случае мне нужны только те, чьи записи соответствуют значению combobox. есть ли в sequel параметр if, который можно использовать?
3. @Zack: Я не уверен, решена ли ваша проблема. Если нет, проверьте обновленный post, особенно первый запрос для MS Access.