PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kueri PostgreSQL dengan kolom yang dihasilkan

select 
t1.name,
sum(case when t2.abbrev='foo' then t1.amount*t2.amount else 0 end) as foo,
sum(case when t2.abbrev='bar' then t1.amount*t2.amount else 0 end) as bar,
sum(case when t2.abbrev='baz' then t1.amount*t2.amount else 0 end) as baz
from usage t1 inner join points t2 on t1.points_id=t2.ident
group by t1.name;

Contoh SQL Fiddle:http://sqlfiddle.com/#!15/cc84a/6;

Gunakan fungsi PostgreSQL berikut untuk kasus dinamis:

create or replace function sp_test()
returns void as
$$

declare cases character varying;
declare sql_statement text;
begin

select string_agg(concat('sum(case when t2.abbrev=','''',abbrev,'''',' then t1.amount*t2.amount else 0 end) as ', abbrev),',') into cases from points;

drop table if exists temp_data;

sql_statement=concat('create temporary table temp_data as select 
t1.name,',cases ,' 
from usage t1 inner join points t2 on t1.points_id=t2.ident
group by t1.name ');

execute sql_statement;

end;
$$
language 'plpgsql';

Fungsi menggunakan tabel sementara untuk menyimpan data kolom dinamis.

Panggil fungsi dengan cara berikut untuk mendapatkan data:

select * from sp_test(); select * from temp_data;




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara tanda kutip tunggal dan tanda kutip ganda di PostgreSQL?

  2. Postgres CASE di ORDER BY menggunakan alias

  3. Bagaimana menemukan hubungan dari Snomed Postgres Sql Database

  4. Bagaimana cara mendapatkan Waktu Pembuatan Database di PostgreSQL 9.0?

  5. Postgres bersarang jika dalam kasus permintaan