是这样的。。现在有一个表。分别有 A1,A2,A3,A4,A5字段。。 要求 将这个表的字段进行 sum(A1)/ distinct count(A2)
     
                       sum(A1)/sum(A3) where A5=“存储过程传进来的ID”   如何写一个存储过程  将这个表的字段
进行计算后,在查出结果集我的思路是 是否将2个算法 算出来保存到变量里, 还是 直接SELECT查呢?? 具体语法怎么些,,请各位帮下忙 谢谢 

解决方案 »

  1.   

    distinct count(A2)
    保存为变量,再进行除法,这样看起来比较清晰
      

  2.   

    能给出 些 具体代码吗??  呵呵 。 DEMO 也可以~
      

  3.   

    --一个语句就可以了,类似
    SELECT SUM(A1) / COUNT(DISTINCT A2) , SUM(A1) / SUM(A3) FROM table1 WHERE A5 = '1111'
      

  4.   

    是这样的  查 sum(A1)/ distinct count(A2)  是没条件 sum(A1)/sum(A3) where A5=“存储过程传进来的ID”  只有这个带条件 。。总不能写带一跳语句上吧~~~
      

  5.   

    稍微补充一下3楼
    LZ要注意一下是否sum和count的分组对象(group by)是不是都一样的
    如果不一样 最好是要做虚表 然后在select的地方进行计算
      

  6.   

    SELECT SUM(A1) / COUNT(DISTINCT A2) , 
           (select SUM(A1) / SUM(A3) FROM table1 WHERE A5 = '1111')
    from T
    是这个意思?
      

  7.   

    distinct count(A2) 是没条件
    分开写啊,你都是存储过程了,这样写起来便于调试
    例如
    存储过程里申明临时变量:
    CAREATE PROCEDURE........
    AS
    V_CNT NUMBER;--临时变量
    BEGIN
    SELECT  count(distinct A2) INTO V_CNT 
    from ... ;SELECT SUM(A1) /V_CNT , SUM(A1) / SUM(A3) FROM table1 WHERE A5 = '1111';end;
      

  8.   

    CREATE OR REPLACE PROCEDURE
      pro_find(A_id NUMBER)
    AS
      v_x1 VARCHAR2(20),v_x2 VARCHAR2(20);
    BEGIN
      SELECT  sum(A1)/ count(distinct(A2)),sum(A1)/sum(A3) INTO v_x1,v_x2 from tablename;
      DBMS_OUTPUT.PUT_LINE('结果是: '|| v_x1|| '    '||v_x2);
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE ('该id不存在');
    END pro_find;
    /楼主结贴了,呵呵
      

  9.   

    ★安徽★→ Chai(340483166)  13:49:43
    100分 存储过程,大家上啊!!
    什么问题再和我讨论哦··
      

  10.   

    N_SUM_COUNT NUMBER;--取得
    select SUM(A1) / COUNT(DISTINCT A2)
    BULK COLLECT INTO
    N_SUM_COUNT
    from ...--放别的表
    FOR W_CNT IN 1..tabMC040020.COUNT LOOP
       insert into T1
       (T10010)
       ...
       value
       (N_SUM_COUNT)
       ...
    End Loop;
      

  11.   


    SQL语句也可有参数化条件啊,怎么不可以?