首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postrge:行到列

Postrge:行到列
EN

Stack Overflow用户
提问于 2018-04-10 21:05:43
回答 1查看 31关注 0票数 0

我有一个表格,其中包含几种语言的街道名称:

代码语言:javascript
复制
streetName(addressId uuid, languageCode text, name text);

使用值:

代码语言:javascript
复制
addressid                            |languagecode |name            |
-------------------------------------|-------------|----------------|
e5c8c25c-f21e-47df-9172-7f3c7e52d669 |cz           |streetName_1_cz |
e5c8c25c-f21e-47df-9172-7f3c7e52d669 |en           |streetName_1_en |
e5c8c25c-f21e-47df-9172-7f3c7e52d669 |fi           |streetName_1_fi |
e5c8c25c-f21e-47df-9172-7f3c7e52d669 |sv           |streetName_1_sv |
bff096cc-4d4d-4b2e-aac2-bdc6ab659a72 |fi           |streetName_2_fi |
bff096cc-4d4d-4b2e-aac2-bdc6ab659a72 |cz           |streetName_2_cz |

并且需要将cz,fi,en中的街道名称转换为列。(正是这三种语言,即使表中有更多的语言,也可能会发生,这三种语言中的一些语言的值就会丢失)。

因此,预期的结果是:

代码语言:javascript
复制
addressid                            |streetNameCz    |streetNameEn    |streetNameFi    |
-------------------------------------|----------------|----------------|----------------|
e5c8c25c-f21e-47df-9172-7f3c7e52d669 |streetName_1_cz |streetName_1_en |streetName_1_fi |
bff096cc-4d4d-4b2e-aac2-bdc6ab659a72 |streetName_2_cz |                |streetName_2_fi |

该怎么做呢?我尝试使用交叉表,但它不能正常工作,因为某些语言缺少值,所以我得到了如下结果:

代码语言:javascript
复制
addressid                            |streetNameCz    |streetNameEn    |streetNameFi    |
-------------------------------------|----------------|----------------|----------------|
e5c8c25c-f21e-47df-9172-7f3c7e52d669 |streetName_1_cz |streetName_1_en |streetName_1_fi |
bff096cc-4d4d-4b2e-aac2-bdc6ab659a72 |streetName_2_cz |streetName_2_fi |                |

这是错误的:-(。

这是我使用的select:

代码语言:javascript
复制
SELECT *
FROM crosstab(
  'select 
    "addressid"::uuid as rowid, 
    languagecode::text as attribute,
    name::text as value
from streetName
where languageCode in (''cz'', ''en'', ''fi'') 
order by 1, 2')
AS ct(row_name uuid, "streetNameCz" text, "streetNameEn" text, "streetNameFi" text);

谢谢你的建议。

兰格。

EN

回答 1

Stack Overflow用户

发布于 2018-04-10 21:23:38

如果你不想使用交叉表,你可以简单地做聚合:

代码语言:javascript
复制
  SELECT addressid,
         MAX( CASE WHEN languagecode = 'cz' THEN name END ) as lng_cz,
         MAX( CASE WHEN languagecode = 'en' THEN name END ) as lng_en,
         MAX( CASE WHEN languagecode = 'fi' THEN name END ) as lng_fi
  FROM YourTable
  GROUP BY addressid
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49754498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档