Prefixing few more columns to CROSSTAB result set- Row-Data

From: M Sarwar <sarwarmd02(at)outlook(dot)com>
To: "pgsql-admin(at)lists(dot)postgresql(dot)org" <pgsql-admin(at)lists(dot)postgresql(dot)org>
Subject: Prefixing few more columns to CROSSTAB result set- Row-Data
Date: 2024-03-18 22:41:10
Message-ID: DM4PR19MB5978C0E8F9721FE0198F1D10D32D2@DM4PR19MB5978.namprd19.prod.outlook.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

Hi All,

In my CROSSTAB SQL, column data is dynamic. That means, number of heading columns will vary from time to time.

I am listing the function code.

-- pivotcode beginning --------x

CREATE OR REPLACE FUNCTION bronxdev.Bronx_Mcm_Stage_Shipping_Pivot

RETURNS character varying AS

$BODY$

declare

dynsql1 varchar;

dynsql2 varchar;

columnlist varchar;

begin

-- Set 1. retrieve list of column names.

-- Below Line [and TESTC.TEST_NUMBER ] will go away after the trials

dynsql1 = 'SELECT STRING_AGG ( TESTC.TEST_NUMBER, '' text, '' ORDER BY TESTC.TEST_NUMBER ) || '' text''' ||

' FROM BRONXdev.TEST_PART_DETAILS_ALL_MCM PART, BRONXDEV.TEST_RESULTS_ALL_MCM TRESULT, BRONXDEV.TEST_TEST_DETAILS_ALL_MCM TESTC '||

' WHERE PART.TEST_PART_DET_ALL_MCM_ID = TRESULT.TEST_PART_DETAILS_ALL_MCM_ID '||

' AND TRESULT.TEST_TEST_DETAILS_ALL_MCM_ID = TESTC.TEST_TEST_DETAILS_ALL_MCM_ID '||

' and PART.STAGE = '|| '''FT''' ||

' and PART.RUN_ID = '|| '''607702''' ||

' GROUP by PART.SERIAL_NUMBER limit 1 '

;

-- RAISE info 'Hello!';

RAISE NOTICE 'dynsql1 - > %', dynsql1;

execute dynsql1 into columnlist;

-- RAISE NOTICE 'Test Numbers - > %', columnlist;

-- Set 2. set up the crosstab query

dynsql2 = 'SELECT * FROM CROSSTAB ( '' SELECT PART.SERIAL_NUMBER, TESTC.TEST_NUMBER, TRESULT.TEST_RESULT ::text'||

' FROM BRONXdev.TEST_PART_DETAILS_ALL_MCM PART, BRONXDEV.TEST_RESULTS_ALL_MCM TRESULT, BRONXDEV.TEST_TEST_DETAILS_ALL_MCM TESTC' ||

' WHERE PART.TEST_PART_DET_ALL_MCM_ID = TRESULT.TEST_PART_DETAILS_ALL_MCM_ID '||

' AND TRESULT.TEST_TEST_DETAILS_ALL_MCM_ID = TESTC.TEST_TEST_DETAILS_ALL_MCM_ID '||

' and PART.STAGE = '|| '''''FT'''''||

' and PART.RUN_ID = '|| '''''607702''''' ||

' ORDER BY PART.SERIAL_NUMBER , TESTC.TEST_NUMBER '' )' ||

' as ConcatenatedResults ( SERIAL_NUMBER character varying(18), '||columnlist||' );';

RAISE NOTICE 'dynsql2 - > %', dynsql2;

return dynsql2;

end

$BODY$

LANGUAGE plpgsql VOLATILE

COST 100;

-- pivotcode ending --------x

After generating the SQL needed for CROSSTAB in dynsql2, I need to add few columns from the same table to the SQL. CROSSTAB directly does not any option to have more than 1 column as ROW-DATA in the CROSSTAB clause.

I need to further develop the function to add few more columns from the table BRONXdev.TEST_PART_DETAILS_ALL_MCM.

In the above function, I have the SQL generated by dynsql2. I need to add columns to the SQL generated by dynsql2

I am unable to think on how to add few columns to the result set of CROSSTAB.

I would appreciate any help on this. Management is thinking that I do not know how to write a SQL which is absurd.

Please let me know if you need any additional information.

Thanks,

Sarwar

+1 240-483-1016

Browse pgsql-admin by date

  From Date Subject
Next Message Erik Serrano 2024-03-19 01:20:20 Versions of PGAdmin4
Previous Message Tom Lane 2024-03-18 14:40:42 Re: pg_restore with -j > 1 breaks the "clean" phase by not removing dependencies in order