想象一下我在postLGA表中有一行数据,例如:

Id Value
1 User_1
2 Region_3
3 User_2

我想以一种使用_字符前Value的部分来确定填充哪个列的方式 Select 值,这样结果将是:

Id User Region
1 1 null
2 null 3
3 2 null

只需要有固定数量的值,而且这些值永远很小.SQL中有没有方法可以做到这一点?

我可以看到可以用不同的值填充单元格,例如this answer,但我无法找到有关根据行内容填充列的任何详细信息.

我已经能够使用left得出值的相关部分:

SELECT
left("Value", strpos("Value", '_') - 1) as "Type"

但我不知道我将如何看待它并使用它来确定列.

推荐答案

使用 case 陈述.

这是小提琴https://www.db-fiddle.com/f/nTapovF5r5b8U4Tmjhy4tU/1

select id, 
case  split_part(value, '_', 1)
    when 'User' then split_part(value, '_', 2)
    end as User,
 case  split_part(value, '_', 1)
    when 'Region' then split_part(value, '_', 2)
    end as Region
from tableone;

Sql相关问答推荐

数据子集的左连接

Oracle SQL对列进行汇总并在列表底部显示总计

SQL查询以创建手头的流动余额?

SQL是否可以计算每年的所有日期变化?

按每天的最大值分组

使用WHERE子句进行筛选时,SQL SELECT查询返回总计数

按日期时间(不包括秒)连接表

返回UPSERT中的旧行值

如何实现同一列的递归计算?

在一个子查询中签入ID';S,如果未返回,则签入另一个子查询

IF NOT EXISTS子查询的性能瓶颈

每个学校 Select N个最新的行,但跳过同一学生的重复行

确定小数中使用的精度位数

统计重复记录的总数

递归 CTE 附加为行

达到特定值时,从0开始累加求和

如何在 ClickHouse SQL 中使用 CTE 将邻居语句中的数字作为偏移量传递?

忽略与给定列匹配的行的 LAG 函数

过滤具有一对多关系的两个表之间的数据

As400 (IBM i) SQL 表 QSYS2.SYSTABLES 上的元数据