嗯... 标准 SQL 的替代建议。有一张CODE_WEIGHT
桌子,例如:
CODE WEIGHT
T 3
E 2
F 1
然后按 Person 对您的查询进行分组(如果这是分组标准)并选择包含max(weight)
.
我会在几分钟后发布查询。
更新
好的,抱歉耽搁了。
这是使用前面所述的表格和@Randy 技巧的解决方案:
SELECT
pp.person, decode(max(c.weight), 3, 'T', 2, 'E', 1, 'F', '') code
FROM
person pp INNER JOIN code_weight c on (pp.code = c.code)
GROUP BY
pp.person
ORDER BY
person DESC;
我很确定有一种方法可以转储 Oracle 专有功能并在纯 SQL 中完成工作......无论如何,既然您要求使用 Oracle 解决方案,就在这里。
更新 2
正如所承诺的,这是我能想到的最好的标准 SQL 版本:
SELECT
p.person, c.code
FROM
(
SELECT
pp.person, MAX(cc.weight) weight
FROM
person pp INNER JOIN code_weight cc ON (pp.code = cc.code)
GROUP BY
pp.person
) p INNER JOIN code_WEIGHT c ON (p.weight = c.weight)
ORDER BY
p.person DESC;
这两个连接有点难看......但它在没有专有扩展的情况下完成了这项工作。任何 SQL 大师都知道如何优化它?
干杯,