请问高手们一个问题,我是菜鸟
  conn.SQL.Text:='select *,(select sum(storenumber) from store where store.storesn=product.productsn) as total,(if abs((select sum(storenumber) from store where store.storesn=product.productsn)<productwarr)then ''不足'') as warr FROM product WHERE productnature=''材料'''; 这个语句老是报未指定错误,这个哪里错了,我改成下面的也不行
  conn.SQL.Text:='select *,(select sum(storenumber) from store where store.storesn=product.productsn) as total,(case abs((select sum(storenumber) from store where store.storesn=product.productsn)<productwarr) when true then ''不足'' end) as warr FROM product WHERE productnature=''材料'''分不够再补

解决方案 »

  1.   

    把表结构贴出来,数据库是什么的?好像是case语句有问题
      

  2.   

    数据库是access,用adoquery连接
    表product里有 productnature productsn productclass productname producttype productun productre productcraft
    表store 里有 billindex storehouse storesn storetype storename storeclass storeun storenumber
      

  3.   


    select *,(select sum(storenumber) from store 
    where store.storesn=product.productsn) as total,
    (case 
      when (select abs(sum(storenumber)) from store 
      where store.storesn=product.productsn)<productsn
      then '不足' end) as warr 
    FROM product WHERE productnature='材料'此语句在sqlserver下调试可以,但在access中不行,不知道access是否支持case等查询,听听别人意见吧
      

  4.   

    ACCESS 不支持Case,对应的语句是IIF,用法基本相同,查查帮助,或上网上搜索一下IIF的用法.
      

  5.   

    IIf 函数
    适用于: Microsoft Office Access 2007
     全部显示
    全部隐藏
    返回两部分之一,具体取决于表达式 (表达式:算术或逻辑运算符、常数、函数和字段名称、控件和属性的任意组合,计算结果为单个值。表达式可执行计算、操作字符或测试数据。)的计算结果。在任何可以使用表达式的地方都可以使用 IIf。您可以使用 IIf 确定另一个表达式是 True 还是 False。如果该表达式为 True,则 IIf 返回某一个值;如果为 False,则 IIf 返回另一个值。您可以指定 IIf 返回的值。请参阅一些示例
    语法IIf(expr, truepart, falsepart)IIf 函数的语法包含以下参数 (参数:为操作、事件、方法、属性、函数或过程提供信息的值。):参数 说明 
    expr 必选。要计算的表达式。 
    truepart 必选。expr 为 True 时返回的值或表达式。 
    falsepart 必选。expr 为 False 时返回的值或表达式。 
    注解尽管 IIf 只返回 truepart 和 falsepart 中的一个,但始终会对这两部分进行计算。因此,应当注意是否出现无谓的副作用。例如,如果计算 falsepart 时导致除数为零错误,那么即使 expr 为 True,也会产生错误。示例
    在窗体或报表上使用 IIf  假定具有一个包含“国家/地区 (CountryRegion)”字段的“客户 (Customers)”表。在窗体中,您想要表示该联系人的首选语言是否是“意大利语 (Italian)”。可以添加一个控件并在其“控件来源”属性中使用 IIf,如下所示: =IIf([CountryRegion]="Italy", "Italian", "Some other language")在窗体视图中打开窗体时,只要“国家/地区”值为“意大利”,该控件就显示“意大利语”,只要“国家/地区”值为其他值,该控件就显示“其他语言 (Some other language)”。在复杂表达式中使用 IIf  可以使用任何表达式作为 IIf 语句的一部分。也可以嵌套 IIf 表达式来评估一系列相关表达式。例如,假设您在图书馆工作。该图书馆的数据库中具有一个名为“借出 (Check Outs)”的表,表中包含名为“截止日期 (Due Date)”的字段,该字段中包含有某本书的归还日期。您可以创建一个窗体,在控件中指示借出书籍的状态,方法是在该控件的“控件来源”属性中使用 IIf 函数,如下所示:=IIf([Due Date]<Date(),"OVERDUE",IIf([Due Date]=Date(),"Due","Not Yet Due"))在窗体视图中打开该窗体时,如果“截止日期”小于当前日期,则该控件显示“过期 (OVERDUE)”,如果该值正好是当前日期,则显示“到期 (Due)”,否则显示“尚未到期 (Not Yet Due)”。在 VBA 代码中使用 IIf   注释   以下示例演示了此功能在 Visual Basic for Applications (VBA) 模块中的使用。有关使用 VBA 的详细信息,请在“搜索”旁边的下拉列表中选择“开发人员参考”,然后在搜索框中输入一个或多个词条。以下示例使用 IIf 函数计算 CheckIt 过程的 TestMe 参数,如果数额大于 1000 则返回“大”;否则返回“小”。Function CheckIt (TestMe As Integer)
        CheckIt = IIf(TestMe > 1000, "Large", "Small")
    End Function