2016-06-06 3 views
0

У меня есть таблица, как это показано ниже:Преобразование одного столбца в несколько столбцов в Postgres

enter image description here

бы хотел изменить формат, как показано ниже на Postgres:

enter image description here

Я попытался использовать аргумент case, но не дал мне желаемых результатов. Заранее благодарю за помощь!

РЕДАКТИРОВАТЬ

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; 

Каждый раз, когда запрос возвращает только 2 строки и значения строки в column_1 являются динамическими и не фиксированы.

+1

«Я пытался использовать случай заявление, но не дал мне желаемых результатов.» Покажите нам свой код и текущие результаты, и мы покажем вам, как его исправить. –

+0

Hi @MattS. Прошу прощения, обновил мой вопрос, надеюсь, что поможет! – Vinay

ответ

0

Вы действительно не предоставили достаточной информации, чтобы действительно ответить на вопрос, но именно так вы преобразовываете эти две строки из одного столбца в два столбца и принудительно вставляете в одну строку.

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

Извините. Я обновил свой вопрос сейчас. Как насчет наличия динамических значений в столбце_1. – Vinay

0

Здесь мы идем ...

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 

В PostgreSQL вы можете легко сделать это с crosstab(), но в Greenplum еще не реализована

+0

Спасибо за ваш ответ. Но значения в таблице здесь динамичны. – Vinay

0

Если результат вы хотите перенести всегда имеет только 2 строки, это будет работать независимо от содержимого этих столбцов, как вы просили:

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

Пожалуйста, обратитесь к этой ссылке. Ранее ответили.

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; 
Смежные вопросы