select  sum(fzqsz-flx) over (partition by gz.fzqdm) as  zqsz from rp_gzbondsdetail gztable rp_gzbondsdetail fzqsz numeric(18, 4),
flx   numeric(18, 4),
fzqdm varchar(50)这条语句在Oracle只运行正常,在sqlserver 05 中报 在关键字 'over' 附近有语法错误。这个错误,请问在sqlserver中改如何改呢!望知道的能否帮忙解决一下,小弟在此感谢

解决方案 »

  1.   

    over (partition by gz.fzqdm order by 字段) 
      

  2.   

    create table tb
    (
       id int,
       num1 int,
       num2 int
    )insert into tb
    select 1,2,3 union all
    select 1,2,3 union all
    select 1,2,3 union all
    select 1,2,3 union all
    select 1,2,3 select id,SUM(num1-num2)over(partition by id) as zqsz  from tb/*
    id zqsz
    1 -5
    1 -5
    1 -5
    1 -5
    1 -5
    */
      

  3.   

    楼上的在oracle中是正解,可是在sqlserver 中就会出错,所以我想在sqlserver中有没有可以代替over的办法,
      

  4.   


    --定义表变量
    DECLARE @rp_gzbondsdetail TABLE
        (
          fzqsz NUMERIC(18, 4) ,
          flx NUMERIC(18, 4) ,
          fzqdm VARCHAR(50)
        )
        
    --插入数据    
    INSERT INTO @rp_gzbondsdetail
    SELECT 2.33,1.33,'a' UNION ALL
    SELECT 4.55,1.55,'b' UNION ALL
    SELECT 6.55,1.2,'c'--查询
    SELECT  SUM(fzqsz - flx) OVER ( PARTITION BY gz.fzqdm ) AS zqsz
    FROM    @rp_gzbondsdetail gz
    --没有特殊修改,可以运行(只是表,变成表变量了)/*
    zqsz
    ---------------------------------------
    1.0000
    3.0000
    5.3500
    */
      

  5.   


    select sum(fzqsz)-sum(flx) as zqsz
    from rp_gzbondsdetail
    group by fzqdm
      

  6.   

    select fzqdm , sum(fzqsz-flx) 
    from rp_gzbondsdetail gz
    group by fzqdm
      

  7.   

    select sum(fzqsz-flx) over (partition by gz.fzqdm) as zqsz from rp_gzbondsdetail gz
    这里的over partition by 其实就是按fzqdm分组!
    可使用group by 
    select  sum(fzqsz-flx)  from rp_gzbondsdetail gz
    group by fzqdm
      

  8.   


    if object_id('rp_gzbondsdetail') is not null
     drop table rp_gzbondsdetail
    gocreate TABLE rp_gzbondsdetail 
    (
      fzqsz NUMERIC(18, 4) ,
      flx NUMERIC(18, 4) ,
      fzqdm VARCHAR(50)
    )
        
    INSERT INTO rp_gzbondsdetail
    SELECT 2.33,1.33,'a' UNION ALL
    SELECT 4.55,1.55,'b' UNION ALL
    SELECT 6.55,1.2,'c'select  sum(fzqsz-flx) zqsz  from rp_gzbondsdetail gz
    group by fzqdmzqsz                                     
    ---------------------------------------- 
    1.0000
    3.0000
    5.3500(所影响的行数为 3 行)