sql – Postgres – 将行转置到列
发布时间:2020-05-24 10:21:33 所属栏目:MsSql 来源:互联网
导读:我有下表,为每个用户提供多个电子邮件地址。 我需要将其展开为用户查询的列。根据创建日期给我“最新”3个电子邮件地址。 user.name | user.id | email1 | email2 | email3**Mary | 123 | mary@gmail.com | mary@yahoo.co.uk | mary@test.com
|
我有下表,为每个用户提供多个电子邮件地址。 我需要将其展开为用户查询的列。根据创建日期给我“最新”3个电子邮件地址。 user.name | user.id | email1 | email2 | email3** Mary | 123 | mary@gmail.com | mary@yahoo.co.uk | mary@test.com Joe | 345 | joe@gmail.com | [NULL] | [NULL] 解决方法使用 tablefunc模块中的交叉表()。SELECT * FROM crosstab(
$$SELECT user_id,user_name,rn,email_address
FROM (
SELECT u.user_id,u.user_name,e.email_address,row_number() OVER (PARTITION BY u.user_id
ORDER BY e.creation_date DESC NULLS LAST) AS rn
FROM usr u
LEFT JOIN email_tbl e USING (user_id)
) sub
WHERE rn < 4
ORDER BY user_id
$$,'VALUES (1),(2),(3)'
) AS t (user_id int,user_name text,email1 text,email2 text,email3 text);
我用美元引用第一个参数,这没有什么特别的意义。如果您必须在查询字符串中转义单引号,这是一个常见的情况,那就很方便: > Insert text with single quotes in PostgreSQL 详细说明和说明: > PostgreSQL Crosstab Query 特别是“额外列”: > Pivot on Multiple Columns using Tablefunc 这里的特殊困难是: >缺少关键名字。 注意 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
