嗨,我有一张这样的桌子

name cat_type
coco Dom
coky Anggora
chee Turk
eena Persian
onaa Dom
haina Turk
haani Dom

我想试着转变成这样

Dom Anggora Turk Persian
coco coky chee eena
onaa null haina null
haani null null null

我try 了以下方法:

SELECT *
FROM my_table
PIVOT( STRING_AGG(name) FOR cat_type IN ('Dom','Anggora','Turk','Persian'))   

但我没有得到我想要的,因为我得到了如下结果:

Dom Anggora Turk Persian
coco,onaa,haani coky chee,haina eena

我的查询有什么问题吗?

提前谢谢您!

推荐答案

这个问题看起来像是classic 轴心的一个细微变化.您缺少的是要分组的列,在本例中是行号.

WITH cte AS(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY cat_type ORDER BY name) AS rn
    FROM my_table
)
SELECT *, 
FROM cte
PIVOT (STRING_AGG(name) FOR cat_type IN ('Dom','Anggora','Turk','Persian'))

Sql相关问答推荐

如何以"% m—% d"格式对生日列表进行排序,以查找与今天最近的日期?

如何在联接条件不匹配时按日期获取上一条记录

如何从多行数据中获取一行合并数据?

snowflake/SQL嵌套的JSON对象和数组

在SQL GROUP BY中的某些行之后执行计算

Select 最频繁的值以及分组依据

Snowflake 中的分层数据

根据具有特定值的 ID 创建自定义组

在特定条件下使用 LAG,确定要采用什么 LAG 值?

匹配 H[0-9][0-9] 但不匹配除字母 H 之外的任何字母

如何为 ActiveRecord 联接应用附加条件

在Snowflake中,如何将以逗号和连字符分隔的多个混合数值拆分成数字列表

如何优化仅返回符合条件的三条记录的查询?

每个ID的SQL返回可能的最低级别及其值

如何在 RavenDB Studio (RQL) 中插入更新文档

如何根据另一列对行值进行分组?

如何在 Oracle 中获取此变量的值?

删除具有相同 ID 的重复记录 - Postgresql

在 SQL 中将行显示为列

如何将我的查询包含在我的查询结果中?