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

पोस्टग्रेज - पंक्तियों को कॉलम में स्थानांतरित करें

crosstab() का उपयोग करें टेबलफंक मॉड्यूल से।

SELECT * FROM crosstab(
   $$SELECT user_id, user_name, rn, email_address
     FROM  (
        SELECT u.user_id, u.user_name, e.email_address
             , row_number() OVER (PARTITION BY u.user_id
                            ORDER BY e.creation_date DESC NULLS LAST) AS rn
        FROM   usr u
        LEFT   JOIN email_tbl e USING (user_id)
        ) sub
     WHERE  rn < 4
     ORDER  BY user_id
   $$
  , 'VALUES (1),(2),(3)'
   ) AS t (user_id int, user_name text, email1 text, email2 text, email3 text);

मैंने पहले पैरामीटर के लिए डॉलर-कोटिंग का इस्तेमाल किया, जिसका कोई विशेष अर्थ नहीं है। क्वेरी स्ट्रिंग में सिंगल कोट्स से बचना सुविधाजनक है, जो एक सामान्य मामला है:

  • पोस्टग्रेएसक्यूएल में सिंगल कोट्स के साथ टेक्स्ट डालें

विस्तृत विवरण और निर्देश:

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

और विशेष रूप से, "अतिरिक्त कॉलम" के लिए:

  • Tablefunc का उपयोग करके अनेक स्तंभों पर पिवट करें

विशेष कठिनाइयाँ यहाँ हैं:

  • प्रमुख नामों की कमी।
    --> हम row_number() . के साथ प्रतिस्थापित करते हैं एक सबक्वेरी में।

  • ईमेल की अलग-अलग संख्या।
    --> हम अधिकतम सीमा तक सीमित करते हैं। बाहरी में तीन में से SELECT
    और crosstab() का इस्तेमाल करें दो मापदंडों के साथ, संभावित कुंजियों की सूची प्रदान करते हुए।

NULLS LAST . पर ध्यान दें ORDER BY . में ।




  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. PostgreSQL में टेबल को अनपिवट कैसे करें

  5. रेल पर रूबी:क्या डेटाबेस से आइटम खींचने और उन्हें एक निर्दिष्ट क्रम में वापस करने का कोई तरीका है?