Oracle SQL按STDNT_GROUP首字母规则实现行转列的方法咨询
需求实现解答
该需求完全可以通过SQL实现,最通用的实现方式是使用条件聚合,兼容MySQL、PostgreSQL、SQLite、SQL Server、Oracle等绝大多数主流SQL数据库。
实现逻辑
- 按
EMPLID字段分组,将同一个员工的所有记录聚合到同一行 - 通过
CASE WHEN判断STDNT_GROUP的前缀,分别匹配到对应的目标列 - 使用
MAX()/MIN()聚合函数提取匹配到的值,无匹配值时自动返回NULL,完全符合预期输出要求
示例SQL代码
假设你的原始表名为student_groups,可直接运行以下语句得到目标结果:
SELECT EMPLID AS Emplid, MAX(CASE WHEN STDNT_GROUP LIKE 'H%' THEN STDNT_GROUP END) AS Hos, MAX(CASE WHEN STDNT_GROUP LIKE 'T%' THEN STDNT_GROUP END) AS Tut, MAX(CASE WHEN STDNT_GROUP LIKE 'M%' THEN STDNT_GROUP END) AS Mess FROM student_groups GROUP BY EMPLID ORDER BY EMPLID;
补充说明
如果你的数据库支持PIVOT专用语法,也可以用对应行转列函数实现,上述条件聚合写法不依赖数据库特定语法,兼容性最强。
内容的提问来源于stack exchange,提问作者stackoverflow rohit
相关产品推荐
相关产品推荐

