2016-06-06 11 views
0

Ich habe eine Tabelle wie folgt aus:eine Spalte, um mehrere Spalten in Postgres

enter image description here

Möchten Sie das Format ändern, wie unten auf Postgres:

enter image description here

Ich habe versucht, um die Fallaussage zu verwenden, aber gab mir nicht die gewünschten Ergebnisse. Vielen Dank im Voraus für die Hilfe!

EDIT

select (case when column_1='A' then column_1 else 'other' end) column_1, 
(case when column_1='B' then Column_1 else 'other' end) column_2 from test_t 
where id= random_value; 

Jedes Mal, wenn die Abfrage nur 2 Zeilen und die Zeilenwerte in dem Spalte_1 kehrt sind dynamisch und nicht festgelegt.

+1

„Ich habe versucht, den Fall Aussage zu verwenden, aber hat mir nicht die gewünschten Ergebnisse.“ Zeigen Sie uns Ihren Code und die aktuellen Ergebnisse und wir zeigen Ihnen, wie Sie ihn beheben können. –

+0

Hallo @MattS. Ich entschuldige mich, aktualisiert meine Frage hoffe das hilft! – Vinay

Antwort

0

Sie haben nicht wirklich genug Informationen bereitgestellt, um die Frage wirklich zu beantworten, aber so konvertieren Sie diese zwei Zeilen von einer Spalte in zwei Spalten und erzwingen eine einzelne Zeile.

select max(column_1) as column_1, max(column_2) as column_2 
from (select case when column_1 = 'A' then column_1 else '' end as column_1, 
      case when column_1 = 'B' then column_1 else '' end as column_2 
     from table_name); 
+0

Entschuldigung. Ich habe meine Frage jetzt aktualisiert. Wie wäre es, wenn wir die dynamischen Werte in der Spalte_1 haben? – Vinay

0

Hier gehen wir ...

CREATE TABLE test_table(column_1 text); 

INSERT INTO test_table ('A'),('B'); 

SELECT * FROM test_table ; 

column_1 
--------- 
B 
A 

SELECT 
max(case when column_1='A' THEN column_1 END) column_1, 
max(case when column_1='B' THEN column_1 END) column_2 
from test_table; 

column_1 | column_2 
----------+---------- 
A  | B 

In PostgreSQL Sie dies mit crosstab() leicht tun können, aber in Greenplum noch ist es nicht

+0

Danke für Ihre Antwort. Die Werte in der Tabelle sind jedoch dynamisch. – Vinay

0

Wenn das Ergebnis Sie wollen umgesetzt transponieren immer hat nur 2 Zeilen, dies funktioniert unabhängig vom Inhalt dieser Spalten, wie Sie gefragt haben:

SELECT 
MAX(CASE WHEN row_number=1 THEN column_1 END) column_1, 
MAX(CASE WHEN row_number=2 THEN column_1 END) column_2 
FROM (SELECT column_1, 
      ROW_NUMBER() OVER (ORDER BY test_table.column_1) 
     FROM test_table) t; 

column_1 | column_2 
----------+---------- 
A  | B 
0

Bitte beziehen Sie sich auf diesen Link. Zuvor beantwortet.

stackoverflow.com/a/10625294/1870151

SELECT 
    unnest(array['col1', 'col2', 'col3']) AS "Columns", 
    unnest(array[col1::text, col2::text, col3::text]) AS "Values" 
FROM tbl; 
Verwandte Themen