सबसे पहले, crosstab()
फ़ंक्शन का परिवार मानक PostgreSQL में स्थापित नहीं है। आपको एक्सटेंशन tablefunc
install इंस्टॉल करना होगा इसके लिए। PostgreSQL 9.1 में आप बस:
CREATE EXTENSION tablefunc;
पुराने संस्करणों के लिए इस संबंधित उत्तर पर एक नज़र डालें।
क्वेरी
क्वेरी इस तरह दिख सकती है:
SELECT *
FROM crosstab (
'SELECT l.id
,c.column_name
,c.data
FROM custom_columns_table c
JOIN list_table l ON l.id = c.list_id
ORDER BY 1',
'SELECT DISTINCT column_name
FROM custom_columns_table
ORDER BY 1')
AS tbl (
id integer
,email text
,name text
);
मैं crosstab()
. के रूप का उपयोग करता हूं दो मापदंडों के साथ, क्योंकि यह लापता विशेषताओं की अनुमति देता है। जैसे, जब किसी व्यक्ति के पास ईमेल न हो। फिर यह फॉर्म NULL
लौटाएगा email
. के लिए कॉलम। विस्तृत विवरण:
- PostgreSQL क्रॉसस्टैब क्वेरी
फ़ंक्शन
या एक फ़ंक्शन बनाएं ताकि आपको प्रत्येक कॉल के लिए कॉलम परिभाषा सूची की आपूर्ति न करनी पड़े:
CREATE OR REPLACE FUNCTION f_mycross(text, text)
RETURNS TABLE (
id integer
,email text
,name text)
AS '$libdir/tablefunc','crosstab_hash' LANGUAGE C STABLE STRICT;
कॉल करें:
SELECT * FROM f_mycross(
'SELECT l.id
,c.column_name
,c.data
FROM custom_columns_table c
JOIN list_table l ON l.id = c.list_id
ORDER BY 1',
'SELECT DISTINCT column_name
FROM custom_columns_table
ORDER BY 1')