我尝试编写查询以根据特定密钥将表的值放在一行上。
table.ID | table.ACCOUNT |
==================================
12345 | 456789 |
12345 | ABCDEF |
12345 | HIJKLM |
例如,我想将ID 12345(上图)的所有ACCOUNT都放到一行上,看起来就像下面的那样。
table.ID | table.ACCOUNT1 | table.ACCOUNT2 | table.ACCOUNT3 |
====================================================================
12345 | 456789 | ABCDEF | HIJKLM |
我想我想加入表格,但我在第2和第3个ACCOUNT字段中保持相同的值(即456789显示在所有3个字段中)。
答案 0 :(得分:0)
如果您不需要为所有帐户分别使用单独的列,请考虑在Postgres中使用聚合函数,例如string_agg
:
SELECT id, string_agg(account, ',') FROM table GROUP BY id
这将产生一个包含两列的结果,id和一个字符串,其中包含由,
个字符分隔的id的所有帐户。
答案 1 :(得分:0)
如果您知道每个ID最多有三个帐户,则可以转动数据。在大多数数据库中,您可以使用row_number()
和条件聚合:
select id,
max(case when seqnum = 1 then account end) as account_1,
max(case when seqnum = 2 then account end) as account_2,
max(case when seqnum = 3 then account end) as account_3
from (select t.*
row_number() over (partition by id order by id) as seqnum
from t
) t
group by id;
与字符串聚合方法不同,这会将值放入单独的列中。