如何通过SQL从同表Role列生成Supervisor与Administrator列?
如何用SQL将Role列数据转换为新增列?
现有contacts表包含ClientName、Role、Name三列,数据如下:
ClientName Role Name A123 Supervisor Dave 1 A123 Administrator Dave 2 Q012 Supervisor Jane2 Q012 Administrator Kent3
需要编写SQL查询,按ClientName聚合,将对应Role的Name值分别放入Supervisor和Administrator列,期望结果如下:
ClientName Supervisor Administrator A123 Dave 1 Dave 2 Q012 Jane2 Kent3
解决方案
方法1:通用写法(支持所有SQL数据库)
使用CASE表达式结合聚合函数(MAX/MIN)实现行转列,因为每个ClientName对应每个Role仅存在一条数据,聚合函数可以精准提取对应值:
SELECT ClientName, MAX(CASE WHEN Role = 'Supervisor' THEN Name END) AS Supervisor, MAX(CASE WHEN Role = 'Administrator' THEN Name END) AS Administrator FROM contacts GROUP BY ClientName;
方法2:使用PIVOT语法(适用于SQL Server、Oracle等支持的数据库)
如果你的数据库支持PIVOT操作,可以用更简洁的语法:
SELECT ClientName, Supervisor, Administrator FROM contacts PIVOT ( MAX(Name) FOR Role IN (Supervisor, Administrator) ) AS PivotTable;
内容的提问来源于stack exchange,提问作者kelloggs_cornflakes
相关产品推荐
相关产品推荐

