【问题标题】:Using Case Select in a Select SQL Query在 Select SQL 查询中使用 Case Select
【发布时间】:2011-04-21 13:59:05
【问题描述】:
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 语句来代替吗?

【问题讨论】:

  • SQL 的实现是什么? Oracle、Sql 服务器、MySQl、PostGres?
  • 那个 SQL 看起来坏了。至少有丢失和重复的括号。
  • 我在微软访问中使用 sql
  • 您没有在 Access 中使用 那个 SQL,因为 Jet/ACE 的 SQL 方言中没有 CASE/WHEN/ELSE。

标签: sql ms-access case


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

这里好像不需要 CASE:

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
    

    对于甲骨文

       SELECT <YOUR_SELECT_LIST>
         FROM ParentTable 
        WHERE NVL(Forms!FormName!ComboBox,  ParentTable.Column) = ParentTable.Column        
    

    【讨论】:

    • 我在微软访问中使用 sql。那是哪一个?
    • 另外我不知道动态绑定值是什么意思。我为没有帮助而道歉。如果组合框的值为 null 我想要 parenttable.column 中的所有记录,否则我只想要那些记录与组合框的值匹配的记录。续集中有 if 语句可以使用吗?
    • @Zack:我不确定您的问题是否已解决。如果不检查更新的帖子,特别是 MS Access 的第一个查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    相关资源
    最近更新 更多