根据唯一标识符

时间:2017-04-12 22:24:01

标签: sql

我尝试编写查询以根据特定密钥将表的值放在一行上。

  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个字段中)。

2 个答案:

答案 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;

与字符串聚合方法不同,这会将值放入单独的列中。