Oracle SQL无需自连接实现行转列查询指定字段方法咨询
Oracle无自连接行转列实现方案
你需要的行转列查询不需要使用自连接,有两种成熟的实现方式:
方式1:条件聚合(所有Oracle版本通用)
通过CASE条件判断配合聚合函数实现,兼容性最强:
SELECT id, MAX(CASE WHEN datacode = 'man' THEN datavalue END) AS man, MAX(CASE WHEN datacode = 'married' THEN datavalue END) AS married FROM 你的表名 GROUP BY id ORDER BY id;
说明:因为同id下每个datacode对应的datavalue唯一,使用MAX/MIN聚合都可以取出对应的值,过滤掉不匹配的NULL结果。
方式2:PIVOT内置函数(Oracle 11g及以上版本支持)
Oracle官方提供的专属行转列函数,语法更简洁:
SELECT id, man, married FROM 你的表名 PIVOT ( MAX(datavalue) FOR datacode IN ('man' AS man, 'married' AS married) ) ORDER BY id;
两种方式返回的结果都和你给出的期望结果完全一致。
内容的提问来源于stack exchange,提问作者Ng Zheng Jie
相关产品推荐
相关产品推荐

