1

このようなPostgresテーブルが与えられます

nummer  vorname    name        cash
------|-----------|-----------|-----
1       paul       smith       500
2       andy       london      700
2       mike       dover       700
3       clara      winchester  200

このテーブルをクエリするには、私のSQLは次のようになります。

SELECT 
  nummer,
  vorname,
  name,  
  cash as total
FROM 
  data.myTable
GROUP BY
  nummer, 
  name,
  vorname,
  cash
ORDER BY
  nummer; 

が同じである 2 つの行を連結することは可能ですかnummer(この場合は2)。私の出力は次のようになるはずです(数値が等しい場合、現金も同じ値になります):

nummer  vorname    name        cash
------|-----------|-----------|-----
1       paul       smith       500
2       andy       london      700
        mike       dover       
3       clara      winchester  200
4

2 に答える 2

10

使用GROUP BYおよび集計関数string_agg():

SELECT nummer
      ,string_agg(vorname, E'\n') AS vorname
      ,string_agg(name, E'\n') AS name
      ,cash
FROM   mytable
GROUP  BY nummer, cash
ORDER  BY nummer, cash;

元の値を取得し、同じ が異なる場合に備えてを追加cashしました。GROUP BYnummer

あなたのコメントについて:

名前でもクエリを一意にすることは可能ですか。2|andy london|700 が 2 回リストされている場合、1 つを削除する必要があることを意味します。

SELECT nummer
      ,string_agg(vorname, E'\n') AS vorname
      ,string_agg(name, E'\n') AS name
      ,cash
FROM  (
   SELECT DISTINCT
          nummer, vorname, name, cash
   FROM   mytable
   ) AS m
GROUP  BY nummer, cash
ORDER  BY nummer, cash;
于 2012-09-11T13:03:19.923 に答える
1
SELECT nummer, 
       array_to_string(array_agg(vorname), E'\n'), 
       array_to_string(array_agg(name), E'\n'),
       cash
  FROM mytable
  group by nummer, cash;

それはそれを行う必要があります。

于 2012-09-11T12:58:42.847 に答える