效率有些低
select a,b,c
  (
   select name as name,id as a,sl as b,je as c from namek 
     union all
   select name as name,'合计' as a,sum(sl) as b,sum(je) as c from  namek 
   )
where name=:name我边上一位同学提醒了,要用union all

解决方案 »

  1.   

    错了,不好意思,我没读透你的sql
      

  2.   

    sql:='select id,sl,je from namek where name='''+v_name+''''+
    ' union '+
    ' select '合计',sum(sl),sum(je) from  namek where name='''+v_name+'''';
      

  3.   

    maohaisheng() 的说法对于sql语句很短的话可能有点道理,但是因为我的sql语句里面还有比这长很多的,并且里面也包含了至少将近十个同样的变量,所以我希望能用一个变量就能够赋值.因为同样的sql语句(包括我上面写的sql语句)在sql server里面用一个变量赋值都没有问题,系统如果发现是同样的变量名的话,它会自动赋值,但是现在换成oracle数据库后却发现了这个问题.
    我现在已经采用了变量的形式,如果改成 jiezhi(西域浪子) 的sql语句,工作量挺大的,所以有没有给一个参数赋值就能解决我提的问题呢.
      

  4.   

    你说的两个name参数实际上是一个参数,只是两个地方都用到了。而你还想用参数的方法使其中一个得到值,那怎么可能呢?
      

  5.   

    jiezhi(西域浪子)你没有明白我的意思,
    我的意思是说在
    select id,sl,je from namek where name=:name
    union 
    select '合计',sum(sl),sum(je) from  namek where name=:name中
    我使用Adoquery.parameters[0].value:='张三'为什么不能运行;
    而一定要Adoquery.parameters[0].value:='张三';
    Adoquery.parameters[1].value:='张三'才能运行,
    也就是同样的变量它赋值了两遍
      

  6.   

    我写的SQL是错误的,返回的结果集和你要求的不一样。以前我也使用过DELPHI,TDBQuery控件的参数是一个数组,想必你也知道,我觉得给一个变量赋值和给一个数组赋值没有多大改动,当然如果参数数组中的元素的含义不一样,也比较麻烦。1.Adoquery.parameters[0].value:='张三';
    2.for (i=0;i<=10;i++)
        Adoquery.parameters[i].value:='张三';
        next
      end for 1-2也没太大改动吧jiezhi(西域浪子)说的静态拼串的方法是应用比较广泛的方法,十分灵活的,如果你没写好程序的话,建议使用他的方法。
      

  7.   

    maohaisheng()你说的
    for (i=0;i<=10;i++)
        Adoquery.parameters[i].value:='张三';
        next
    end for 
    说的是对一个数组里的参数进行赋值,
    这样有问题:
    1.你得知道这个数组里的参数有几个;
    2.sql语句里有可能含有很多变量,但变量并不一定相同.
    所以我还是希望在
    select id,sl,je from namek where name=:name
    union 
    select '合计',sum(sl),sum(je) from  namek where name=:name中
    使用Adoquery.parameters[0].value:='张三'就能够运行;
    而不采用Adoquery.parameters[0].value:='张三';
    Adoquery.parameters[1].value:='张三'才能运行,
    不知道是否明白意思