根据唯一标识符获取 1 行上的值

  • 本文关键字:获取 唯一 标识符 sql
  • 更新时间 :
  • 英文 :


我正在尝试编写一个查询,以根据特定键获取放置在一行上的表的值。

  table.ID    | table.ACCOUNT |
==================================
 12345        | 456789        |
 12345        | ABCDEF        |
 12345        | HIJKLM        |

例如,我想将 ID 12345(上图(的所有帐户放在一行上,使其如下所示。

  table.ID    | table.ACCOUNT1 | table.ACCOUNT2 | table.ACCOUNT3 |
====================================================================
 12345        | 456789         | ABCDEF         | HIJKLM         |
我想

我想将表连接到自己,但我在第二个和第三个帐户字段中不断获得相同的值(即456789出现在所有 3 个字段中(。

如果您实际上不需要为所有帐户使用单独的列,请考虑使用聚合函数,例如 Postgres 中的 string_agg

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

这将生成一个包含两列的结果,即 id 和一个字符串,其中包含由 , 个字符分隔的 id 的所有帐户。

如果您知道每个 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;

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

最新更新