PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL में क्रॉसस्टैब के लिए गतिशील रूप से कॉलम उत्पन्न करें

आप दिए गए C फ़ंक्शन का उपयोग कर सकते हैं crosstab_hash इसके लिए।

इस संबंध में नियमावली बहुत स्पष्ट नहीं है। इसका उल्लेख अध्याय के अंत में crosstab() . पर किया गया है दो पैरामीटर के साथ:

<ब्लॉकक्वॉट>

प्रत्येक क्वेरी में परिणाम कॉलम नाम और प्रकार लिखने से बचने के लिए आप पूर्वनिर्धारित फ़ंक्शन बना सकते हैं। पिछले अनुभाग में उदाहरण देखें। crosstab . के इस रूप के लिए अंतर्निहित C फ़ंक्शन नाम दिया गया है crosstab_hash

आपके उदाहरण के लिए:

CREATE OR REPLACE FUNCTION f_cross_test_db(text, text)
  RETURNS TABLE (kernel_id int, key1 int, key2 int, key3 int)
  AS '$libdir/tablefunc','crosstab_hash' LANGUAGE C STABLE STRICT;

कॉल करें:

SELECT * FROM f_cross_test_db(
      'SELECT kernel_id, key, value FROM test_db ORDER BY 1,2'
     ,'SELECT DISTINCT key FROM test_db ORDER BY 1');

ध्यान दें कि आपको एक अलग crosstab_hash . बनाना होगा प्रत्येक crosstab . के लिए फ़ंक्शन एक अलग रिटर्न प्रकार के साथ कार्य करें।

संबंधित:

  • पोस्टग्रेएसक्यूएल पंक्ति से कॉलम तक

आपका स्तंभ सूची बनाने का कार्य बल्कि जटिल है, परिणाम गलत है (int kernel_id . के बाद गायब है ), इसे इस SQL ​​​​क्वेरी से बदला जा सकता है:

SELECT 'kernel_id int, '
       || string_agg(DISTINCT key::text, ' int, '  ORDER BY key::text)
       || ' int, DUMMY text'
FROM   test_db;

और इसे वैसे भी गतिशील रूप से उपयोग नहीं किया जा सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बाइट के लिए उचित हाइबरनेट एनोटेशन []

  2. PostgreSQL अनुक्रमित कॉलम पर अनुक्रमिक स्कैन क्यों करता है?

  3. Postgresql - बैकअप डेटाबेस और विभिन्न स्वामी पर पुनर्स्थापित करें?

  4. PostgreSQL तालिका बनाएँ

  5. PostgreSQL उपयोगकर्ता के लिए रिक्त पासवर्ड सेट करें