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

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?


person Zack    schedule 19.04.2011    source источник
comment
Какая реализация SQL? Oracle, сервер Sql, MySQl, PostGres?   -  person JNK    schedule 20.04.2011
comment
Этот SQL выглядит сломанным. По крайней мере, скобки отсутствуют и дублируются.   -  person Richard Marskell - Drackir    schedule 20.04.2011
comment
Я использую sql в Microsoft Access   -  person Zack    schedule 20.04.2011
comment
Вы не используете этот SQL в Access, поскольку в диалекте SQL Jet / ACE нет CASE / WHEN / ELSE.   -  person David-W-Fenton    schedule 26.04.2011


Ответы (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        
person Chandu    schedule 19.04.2011
comment
Я использую sql в доступе microsoft. что это? - person Zack; 20.04.2011
comment
Также я не знаю, что вы имеете в виду, говоря о динамической привязке значения. Прошу прощения за бесполезность. Если значение combobox равно null, мне нужны все записи в parenttable.column, а в противном случае мне нужны только те, чьи записи соответствуют значению combobox. есть ли в сиквеле статус if, который можно использовать? - person Zack; 20.04.2011
comment
@Zack: Я не уверен, что ваша проблема решена. Если нет, проверьте обновленный пост, особенно первый запрос для MS Access. - person Chandu; 20.04.2011

Вы не можете использовать параметры формы непосредственно в SQL. Вы можете параметризовать свой запрос и передать параметр, назовем его @FormName:

select
    case
         when @FormName is not null then ParentTable.column1
         else ParentTable.column2
    end
from ParentTable
where ParentTable.column3 = @FormName
person Milimetric    schedule 19.04.2011
comment
что делает для этого @? это личное обозначение или включено в код? - person Zack; 20.04.2011
comment
Вот как вы пишете параметры в sql: declare @myParam int: social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/ - person Milimetric; 20.04.2011

Похоже, здесь CASE не нужен:

SELECT ParentTable.Column
FROM ParentTable
WHERE (Forms!FormName!ComboBox IS NULL)
   OR (Forms!FormName!ComboBox = ParentTable.Column)
person Andriy M    schedule 21.04.2011