有这么一句group by 语句
sql.Add('select sortno as 大类代码,sortname as 大类名称,clientno as 客户代码,clientname as 客户名称,sum(quantity2) as 销售小数量,sum(salessum) as 销售金额,sum(tax) as 销售税金 from '+vw1+' group by sortno,sortname,clientno,clientname');
期中变量vw1是一个表名,在delphi中运行该语句后,总是报“不是group by 表达式”,而如果我不用变量表名的话,就可以正常运行,请问这是什么原因

解决方案 »

  1.   

    建议你先不要执行,把你的sql语句写到edit文本框中复制出来后到查询分析器中执行再看是什么问题
    一般的话问题都可以解决的。
      

  2.   

    '+vw1+'表示成'''+vw1+'''  看看是不是就好了呢 试试看
      

  3.   

    debug,取出SQL语句,执行一下!
      

  4.   

    vw1是string吗
    是这样定义的吗
    var vw1:string;
    这样就行
    或者想楼的也行
      

  5.   

    ' group by sortno,sortname,clientno,clientname');  楼主看看Group by  的用法几知道了   GROUP BY 子句
    指定用来放置输出行的组,并且如果 SELECT 子句 <select list> 中包含聚合函数,则计算每组的汇总值。指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。说明  如果未指定 ORDER BY 子句,则使用 GROUP BY 子句不按任何特定的顺序返回组。建议始终使用 ORDER BY 子句指定具体的数据顺序。
    语法
    [ GROUP BY [ ALL ] group_by_expression [ ,...n ]
            [ WITH { CUBE | ROLLUP } ] 
    ]参数
    ALL包含所有组和结果集,甚至包含那些任何行都不满足 WHERE 子句指定的搜索条件的组和结果集。如果指定了 ALL,将对组中不满足搜索条件的汇总列返回空值。不能用 CUBE 或 ROLLUP 运算符指定 ALL。 如果访问远程表的查询中有 WHERE 子句,则不支持 GROUP BY ALL 操作。group_by_expression是对其执行分组的表达式。group_by_expression 也称为分组列。group_by expression 可以是列或引用列的非聚合表达式。在选择列表内定义的列的别名不能用于指定分组列。说明  text、ntext 和 image 类型的列不能用于 group_by_expression。
    对于不包含 CUBE 或 ROLLUP 的 GROUP BY 子句,group_by_expression 的项数受查询所涉及的 GROUP BY 列的大小、聚合列和聚合值的限制。该限制从 8,060 字节的限制开始,对保存中间查询结果所需的中间级工作表有 8,060 字节的限制。如果指定了 CUBE 或 ROLLUP,则最多只能有 10 个分组表达式。CUBE指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。ROLLUP指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。