在Select SQL Query中使用Case Select

时间:2011-04-19 20:33:06

标签: sql ms-access case

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代码试图完成的是,如果在组合框中进行了选择,则只选择与该字段匹配的记录。其他情况是该字段为空,它只选择所有记录。我对SQL代码不是很熟悉所以请尽可能解释使用的不同参数。

或者我可以使用某种if语句吗?

3 个答案:

答案 0 :(得分:1)

您不能直接在SQL中使用表单参数。您可以参数化查询并传入参数,我们称之为@FormName:

select
    case
         when @FormName is not null then ParentTable.column1
         else ParentTable.column2
    end
from ParentTable
where ParentTable.column3 = @FormName

答案 1 :(得分:1)

这里似乎不需要CASE:

SELECT ParentTable.Column
FROM ParentTable
WHERE (Forms!FormName!ComboBox IS NULL)
   OR (Forms!FormName!ComboBox = ParentTable.Column)

答案 2 :(得分:0)

注意:我假设您动态绑定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