sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-query met gegenereerde kolommen

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 Voorbeeld:http://sqlfiddle.com/#!15/cc84a/6;

Gebruik de volgende PostgreSQL-functie voor dynamische gevallen:

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

Functie gebruikt tijdelijke tabel om dynamische kolomgegevens op te slaan.

Roep de functie op de volgende manier aan om gegevens te krijgen:

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




  1. OracleException (0x80004005) bij verbinding met Oracle Database

  2. Hoe voeg je een enkele rij in de bovenliggende tabel in en vervolgens meerdere rijen in de onderliggende tabel in één SQL in PostgreSQL?

  3. meerdere updates met ajax met php

  4. Gemeenschappelijke gebruiker met SYSBACKUP-privilege