sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL-forespørgsel med genererede kolonner

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;

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

Brug følgende PostgreSQL-funktion til dynamiske sager:

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';

Funktion bruger midlertidig tabel til at gemme dynamiske kolonnedata.

Ring funktion på følgende måde for at få data:

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




  1. Sletter post med laveste ID

  2. Django-indstilling:psycopg2.OperationalError:FATAL:Peer-godkendelse mislykkedes for brugeren indivo

  3. MySQL-injektionsbeskyttelse og sårbarhedstegn ved hjælp af PHP

  4. SQL Server Tekst Datatype Maks. længde =65.535?