Использование выбора регистра в запросе Select SQL

#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.