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

एक एसक्यूएल परिणाम ट्रांसपोज़ करना ताकि एक कॉलम एकाधिक कॉलम पर जा सके

निम्नलिखित डेमो पर विचार करें:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres . में एक अंतराल में एक चर अवधि का उपयोग करना

  2. पोस्टग्रेएसक्यूएल:विदेशी कुंजी/डिलीट कैस्केड पर

  3. डिलीट कॉलम मौजूद नहीं है

  4. त्रुटि:अनुक्रमणिका अभिव्यक्ति में कार्यों को पोस्टग्रेज में अपरिवर्तनीय चिह्नित किया जाना चाहिए

  5. PostgreSQL, SQL स्थिति:42601