使用串联的 Amazon Redshift Pivot
Posted
技术标签:
【中文标题】使用串联的 Amazon Redshift Pivot【英文标题】:Amazon Redshift Pivot using Concatenation 【发布时间】:2019-09-01 23:19:03 【问题描述】:我有一张桌子,看起来像
|------|-------|---------|
|foo_id|country|foo_value|
|------|-------|---------|
| 1 | US | abc |
|------|-------|---------|
| 1 | IN | def |
|------|-------|---------|
| 1 | DE | abc |
|------|-------|---------|
| 2 | US | xyz |
|------|-------|---------|
| 2 | IN | klm |
|------|-------|---------|
这里 foo_id 和 country 的组合是唯一的。所以 1 和 US 将只有 1 行。
我想把它转成
|------|--------|---------|---------|
|foo_id| US | IN | DE |
|------|--------|---------|---------|
| 1 | abc | def | abc |
|------|--------|---------|---------|
| 2 | xyz | klm | |
|------|--------|---------|---------|
我搜索了这个问题,找到了 SQL Server 的答案,它使用“for XML”。
Sql PIVOT and string concatenation aggregate
这个答案使用“FOR XML”,但我不知道为什么我根本不处理 XML 时应该使用“FOR XML”。有没有更好的答案是纯 ANSI SQL 或者更适合红移?
【问题讨论】:
【参考方案1】:您可以使用条件聚合:
SELECT
foo_id,
MAX(CASE WHEN country = 'US' THEN foo_value END) AS US,
MAX(CASE WHEN country = 'IN' THEN foo_value END) AS "IN",
MAX(CASE WHEN country = 'DE' THEN foo_value END) AS DE
FROM mytable
GROUP BY foo_id
【讨论】:
谢谢。你知道如何逃避IN吗?它似乎也是SQL中的一个子句。我试过'IN'
但这不起作用
@KnowsNotMuch:我的错,应该是"IN"
。
不知道我做错了什么但是当我尝试做一个组时我得到错误Invalid operation: failed to find conversion function from "unknown" to character varying
以上是关于使用串联的 Amazon Redshift Pivot的主要内容,如果未能解决你的问题,请参考以下文章
不使用 jdbc 驱动程序查询 Amazon Redshift
使用 Amazon Redshift / PostgreSQL 进行队列分析
使用 Amazon Redshift / PostgreSQL 进行漏斗查询