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

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

आपके उदाहरण के लिए मूल क्रॉसस्टैब क्वेरी सरल है:

SELECT * FROM crosstab(
       'SELECT zoom, day, point
        FROM   province
        ORDER  BY 1, 2'

     , $$VALUES ('2015-10-01'::date), ('2015-10-02')$$)
AS ct (zoom text, day1 int, day2 int);

लेकिन नहीं गतिशील स्तंभ नामों या स्तंभों की एक गतिशील संख्या के साथ। एक समझौता के रूप में, आपके पास स्तंभों की एक निश्चित संख्या हो सकती है और केवल प्रमुख कॉलम भर सकते हैं। मूल बातें:

  • PostgreSQL क्रॉसस्टैब क्वेरी

गतिशील?

crosstab_hash गतिशील कॉलम नामों में आपकी सहायता नहीं करेगा। यह कॉलम परिभाषा सूची टाइप किए बिना बार-बार उपयोग के लिए है, लेकिन गतिशील . के लिए नहीं स्तंभ नाम। उदाहरण:

  • PostgreSQL में क्रॉसस्टैब के लिए गतिशील रूप से कॉलम जेनरेट करें
  • एसक्यूएल:पंक्तियों को स्तंभों में बदलना

वास्तव में गतिशील स्तंभ नामों के लिए, आपको दो . की आवश्यकता है सर्वर के लिए राउंड ट्रिप। चाहे आप दूसरी क्वेरी बनाने के लिए पहली क्वेरी के साथ कॉलम नाम पुनर्प्राप्त करें, या आप कर्सर या अस्थायी तालिका या तैयार कथन बनाएं। आप जो भी कोशिश करें, आपको दो राउंड ट्रिप की जरूरत है। SQL कॉल के समय रिटर्न प्रकार जानना चाहता है।

मेरे कस्टम crosstab_n() . के साथ मैं "डायनेमिक" कॉल के सबसे करीब पहुंच सकता हूं इस संबंधित उत्तर में परिभाषित फ़ंक्शन:

  • केस और ग्रुप बाय के साथ पिवट का डायनामिक विकल्प

या आप पूरी तरह से गतिशील क्रॉसस्टैब क्वेरी का विचार छोड़ देते हैं (क्योंकि, आप जानते हैं, यह असंभव है) और दो-चरणीय वर्कफ़्लो का उपयोग करें, जैसा कि ऊपर बताया गया है।

  1. फ़ंक्शन को क्रॉसस्टैब क्वेरी टेक्स्ट जेनरेट करने दें। आप यहां दिए गए फ़ंक्शन का उपयोग कर सकते हैं (और इसे अपनी आवश्यकताओं के अनुसार अनुकूलित कर सकते हैं!):

    • डायनेमिक क्रॉसस्टैब क्वेरी निष्पादित करें

    <उप>विशेष रूप से, GROUP BY 1, 2 को हटा दें , चूंकि आप क्रॉस टेबुलेशन से पहले पंक्तियों को एकत्रित नहीं करते हैं।

  2. जनरेट किए गए फ़ंक्शन को निष्पादित करें।

पूर्णता के लिए, नया \crosstabview . भी है पोस्टग्रेज में psql में मेटाकमांड 9.6 (अभी जारी किया गया) - समान कार्यक्षमता के साथ, और यह गतिशील कॉलम नाम प्रदर्शित कर सकता है (डायनामिक नाम संलग्न करना psql क्लाइंट में होता है, पोस्टग्रेज सर्वर में नहीं)।




  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. पोस्टग्रेज में सीरियल बढ़ाया जा रहा है, भले ही मैंने संघर्ष पर जोड़ा कुछ भी न करें

  3. postgresql - टेक्स्ट फ़ील्ड के भीतर एक स्ट्रिंग के सभी उदाहरणों को बदलें

  4. कैसे make_timestamptz () PostgreSQL में काम करता है

  5. पोस्टग्रेज़ का उपयोग करके तालिका में दूसरे या तीसरे कॉलम के बाद तालिका में एक नया कॉलम कैसे जोड़ें?