adoquery连接数据库查询数据表。
表名:table1
字段:网桥编号        pos编号          重传次数
       nb_no           pos_no          resendnum
查询得到如下字段:
     nb_no , pos_no , commlv, nstop
其中:commlv指通讯受阻率,nstop指脱机次数
commlv=某个pos的重传次数之和除以表中具有该pos的记录个数
nstop =表中pos重传次数大于10的记录的个数
另外,表中的字段没有全部列出,因为其他的不需要。
      pos归属于网桥,各个网桥下的pos编号是不相同的。
举个例子:
原是数据:
       nb_no        pos_no          resendnum
         1            1                0
         1            1                1
         1            2                12
         2            3                1
最后查询得到如下数据;
       nb_no        pos_no          commlv        nstop
         1            1               0.5           0
         1            2                12           1
         2            3                1            0
这样的数据怎么能够得到?

解决方案 »

  1.   

    select max(nb_no), pos_no,
    sum(resendnum) / count(*) ,
    sum( when case resendnum >10 then 1 else 0 end ) as nstop,
    group by pos_no
      

  2.   

    并不是太明白当pos编号相同而NB_NO不同时的处理SELECT MAX(nb_no),
           SUM(resendnum)/SUM(pos_no) AS commlv,
           SUM(CASE WHEN resendnum > 10 THEN 1 ELSE 0 END) AS nstop
    FROM table1
    GROUP BY nb_no
      

  3.   

    SORRY,一时手快,改正SELECT MAX(nb_no),pos_no
           SUM(resendnum)/SUM(1) AS commlv,
           SUM(CASE WHEN resendnum > 10 THEN 1 ELSE 0 END) AS nstop
    FROM table1
    GROUP BY pos_no
      

  4.   

    select nb_no, pos_no, sum(resendnum)/count(*) as commlv, sum (case when resendnum >10 then 1 else then 0 end) as nstop
    from table1
    group by nb_no, pos_no
    order by nb_no, pos_no
      

  5.   

    ft,网速慢,就tmd吃亏:)
    发的时候一个人没有,现在就4楼了
      

  6.   

    靠,花了我不少时间,不过总算出结果了,努力总算没有白费.BEGIN TRANSACTION
        SET QUOTED_IDENTIFIER ON
        SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
        SET ARITHABORT ON
        SET NUMERIC_ROUNDABORT OFF
        SET CONCAT_NULL_YIELDS_NULL ON
        SET ANSI_NULLS ON
        SET ANSI_PADDING ON
        SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION 
        CREATE TABLE NB_TBL  ( 
            NB_NO  VARCHAR(10)   NULL , 
            POS_NO  VARCHAR(10)  NULL  , 
            RESENDNUM  INT  NULL  , 
            COMMLV  NUMERIC(28,8)  NULL  , 
            NSTOP  INT  NULL 
        ) ON [PRIMARY] 
    IF @@ERROR<>0 BEGIN 
        ROLLBACK TRAN 
        GOTO ON_ERROR 
    END COMMIT 
    ON_ERROR: 
        SELECT 1 AS Error_OK 
    GOinsert NB_Tbl select   '1'   ,         '1'     ,           0
    union 
    select 
             '1' ,           '1',                1
    union 
    select      '1'     ,       '2'      ,          12
    union select          '2'    ,        '3'    ,            1select A.NB_NO ,A.POS_NO,
      CommLv= Convert(numeric(28,8), A.HH) /Convert(numeric(28,8), A.KK),       
      nstop=(case  when HH>10 then KK  else 0  end)
    from   (select sum(resendnum ) As HH ,Count(*) as KK, NB_NO,Pos_No from NB_Tbl    group by NB_NO,POS_NO) A
      

  7.   

    NB_Tbl 是我令起的表名,楼主 改名为  table1就行了.
      

  8.   

    上述语句拿到SQL server上执行,will be OK
      

  9.   

    firetoucher(风焱),不要难过呀,下次有问题第一个找你 :)
     zjy6631(刘阿木) ,你的我没有尝试,辛苦你了。
    需要声明的一点,我用的数据库是oracle8,oracle8上面不支持CASE WHEN THEN ELSE  END,
    我用的是decode。