निम्नलिखित डेमो पर विचार करें:
CREATE TEMP TABLE qa (id int, usr int, question_id int, answer_id int);
INSERT INTO qa VALUES
(1,1,1,1)
,(2,1,2,9)
,(3,1,3,15)
,(4,2,1,2)
,(5,2,2,12)
,(6,2,3,20);
SELECT *
FROM crosstab('
SELECT usr::text
,question_id
,answer_id
FROM qa
ORDER BY 1,2')
AS ct (
usr text
,q1 int
,q2 int
,q3 int);
परिणाम:
usr | q1 | q2 | q3
-----+----+----+----
1 | 1 | 9 | 15
2 | 2 | 12 | 20
(2 rows)
user
आरक्षित शब्द है। इसे कॉलम नाम के रूप में प्रयोग न करें! मैंने इसका नाम बदलकर usr
कर दिया ।
आपको अतिरिक्त मॉड्यूल टेबलफंक स्थापित करने की आवश्यकता है जो फ़ंक्शन प्रदान करता है crosstab()
. ध्यान दें कि यह ऑपरेशन सख्ती से प्रति डेटाबेस है पोस्टग्रेएसक्यूएल में 9.1 आप बस कर सकते हैं:
CREATE EXTENSION tablefunc;
पुराने संस्करण के लिए आप अपने contrib
. में आपूर्ति की गई शेल-स्क्रिप्ट निष्पादित करेंगे निर्देशिका। डेबियन में, PostgreSQL के लिए 8.4 , वह होगा:
psql mydb -f /usr/share/postgresql/8.4/contrib/tablefunc.sql