嗯...标准 SQL 的替代建议。
有一个CODE_WEIGHT 表,例如:
CODE WEIGHT
T 3
E 2
F 1
然后按人员对您的查询进行分组(如果这是分组标准)并选择包含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 高手知道如何优化它?
干杯,