我有一张如下表:
想在postgres上更改以下格式:
我尝试使用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中的行值是动态的而不是固定的。
答案 0 :(得分: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);
答案 1 :(得分: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中仍然无法实现
答案 2 :(得分: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
答案 3 :(得分: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;