2017-04-12 81 views
0

我试图编写一个查询来获取基于特定键的单个行上放置的表的值。基于唯一标识符获取1行上的值

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   | 

我想,我想加入表本身,但我不断收到在第二和第三帐户域(即456789显示了在所有3)相同的值。

+0

您正在使用哪种RDBMS? – Rahul

+0

@ThiagoCustodio,不是。 OP想要按ID列出所有帐户。基于RDBMS有不同的方式,例如SQL Server中的MySQL和XML处理中发布的答案和'group_concat()' – Rahul

回答

0

如果你真的不需要单独列所有帐户,考虑Postgres的使用聚合函数,如string_agg

SELECT id, string_agg(account, ',') FROM table GROUP BY id 

这将产生一个结果,有两列,将ID和包含由,个字符分隔的ID的所有帐户的字符串。

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; 

不同于字符串聚集方法,这使该数值为单独列。