1

多分誰かがpostgresクエリで私を助けてくれるでしょう。

テーブル構造は次のようになります

  nummer   nachname   vorname   cash
 +-------+----------+----------+------+
   2       Bert       Brecht    0,758
   2       Harry      Belafonte 1,568
   3       Elvis      Presley   0,357
   4       Mark       Twain     1,555
   4       Ella       Fitz      0,333
   …

「数値」が同じフィールドを合体させて、現金の価値を合計するにはどうすればよいですか?私の出力は次のようになります。

   2       Bert, Brecht      2,326
           Harry, Belafonte 
   3       Elvis, Presley    0,357
   4       Mark, Twain       1,888
           Ella, Fitz   

合体する部分は次のように機能するはずです。

 array_to_string(array_agg(nachname|| ', ' ||coalesce(vorname, '')), '<br />') as name,   

助けてくれてありがとう、

トニー

4

1 に答える 1

1
SELECT
  nummer, 
  string_agg(nachname||CASE WHEN vorname IS NULL THEN '' ELSE ', '||vorname END, E'\n') AS name,
  sum(cash) AS total_cash
FROM Table1
GROUP BY nummer;

このSQLFiddleを参照してください; 名前の間に改行文字は表示されませんが、まだそこにあることに注意してください。

CASE代わりにステートメントが使用されるためcoalesce、姓はあるが名がないエントリには末尾のコンマがありません。末尾のコンマが必要な場合は、format('%s, %s',vorname,nachname)代わりに使用し、その醜い文字列連結ビジネスをすべて避けてください。

SELECT
  nummer, string_agg(format('%s, %s', nachname, vorname), E'\n'),
  sum(cash) AS total_cash
FROM Table1
GROUP BY nummer;

string_agg動作しない場合は、新しいPostgreSQLを入手するか、質問にバージョンを記載して、廃止されたバージョンを使用していることを明確にしてください。array_to_stringクエリは、array_aggとにかく使用するように簡単に書き直されます。

データベースのsumように実際にテキスト文字列として表される番号を付ける方法を尋ねている場合は、そうしないでください。スキーマを修正します。代わりに、入力と出力で数値をフォーマットし、ジョブに適切な数値タイプが何であれ、、、、、...として格納します。1,2345numericfloat8integer

于 2012-11-05T07:45:22.197 に答える