2017-05-24 4 views
0

次のplpgsqlプロシージャ/関数を使用して、Auto_increment値を持つレコードのセットを取得しようとしています。オートインクリメントを格納するフィールド「位置」を作成しましたが、それは間違っていると思いますが、新しいクエリフィールドを追加する場所をこのクエリでどのように設定するかはわかりません。私の意図ははっきりしていると思います。誰でも私を助けることができますか?、してください!plpgsqlプロシージャ:問合せにauto_incrementフィールドを追加する方法

CREATE OR REPLACE FUNCTION pra2.GetRankingOfPilots(IN sea pra2.season.name%type) 
RETURNS setof RECORD AS $BODY$ 
DECLARE 
    r RECORD; 
    fila integer; 
BEGIN 
    fila:=0; 
    FOR r IN SELECT 
      position, 
      driver.name driver, 
      constructor.name constructor, 
      season.name season, 
      CAST(sum(runs.points) AS int) totalpuntos 
     FROM 
      pra2.hired hired 
     INNER JOIN pra2.constructor on hired.name_constructor = pra2.constructor.name 
     INNER JOIN pra2.driver on hired.num_driver = pra2.driver.num 
     INNER JOIN pra2.runs on pra2.driver.num=pra2.runs.num_driver 
     INNER JOIN pra2.race on pra2.runs.name_race=pra2.race.name AND pra2.runs.season_fk=pra2.race.season_fk AND pra2.runs.season_fk=pra2.race.season_fk 
     INNER JOIN pra2.season on hired.name_season=pra2.season.name AND pra2.race.season_fk=pra2.season.name 
     WHERE 
      pra2.season.name=sea 
     GROUP BY 
      season,driver,constructor 
     ORDER BY 
      TotalPuntos Desc 
    LOOP 
     fila:=fila+1; 
     r.posicion:=fila; 
     RETURN NEXT r; 
    END LOOP; 
RETURN; 
END; 
$BODY$ 
LANGUAGE plpgsql; 

ありがとうございます!

答えて

0

試してみてください。

SELECT 
      row_number() over() position, 
      driver.name driver, 
      constructor.name constructor, 
      season.name season, 
      CAST(sum(runs.points) AS int) totalpuntos 
     FROM 
      pra2.hired hired 
     INNER JOIN pra2.constructor on hired.name_constructor = pra2.constructor.name 
     INNER JOIN pra2.driver on hired.num_driver = pra2.driver.num 
     INNER JOIN pra2.runs on pra2.driver.num=pra2.runs.num_driver 
     INNER JOIN pra2.race on pra2.runs.name_race=pra2.race.name AND pra2.runs.season_fk=pra2.race.season_fk AND pra2.runs.season_fk=pra2.race.season_fk 
     INNER JOIN pra2.season on hired.name_season=pra2.season.name AND pra2.race.season_fk=pra2.season.name 
     WHERE 
      pra2.season.name=sea 
     GROUP BY 
      season,driver,constructor 
     ORDER BY 
      TotalPuntos Desc 
+0

私はそれが前にいたものは何でもまたはキャストBIGINTを作成する機能 – galeonweb

+0

の戻り値の型を変更するには、それをドロップして再 –

+0

を作成することはできませんと言って、種類のエラーが出ます –

関連する問題