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
. में ।