首先,您使用的是 Oracle 提供的快捷方式。这个
SELECT COUNT(MAX(doc_line_num)) AS "TOTAL RECS"
FROM c_lab
WHERE comp_code = 'P1' AND op_code = 'RMARTINEZ'
GROUP BY doc_num;
等价于
SELECT COUNT(max_doc_line_num) AS "TOTAL RECS"
FROM
(
SELECT doc_num, MAX(doc_line_num) AS max_doc_line_num
FROM c_lab
WHERE comp_code = 'P1' AND op_code = 'RMARTINEZ'
GROUP BY doc_num
);
并最终计算具有 doc_line_num 的文档编号。
你也可以这样写
SELECT COUNT(DISTINCT doc_num) AS "TOTAL RECS"
FROM c_lab
WHERE comp_code = 'P1' AND op_code = 'RMARTINEZ' AND doc_line_num IS NOT NULL;
您的第二个查询相当于
SELECT op_code, COUNT(max_doc_line_num) AS "TOTAL RECS"
FROM
(
SELECT op_code, doc_num, MAX(doc_line_num) AS max_doc_line_num
FROM c_lab
WHERE comp_code = 'P1' AND op_code = 'CHRISTIANMONTALVO'
GROUP BY op_code, doc_num
);
这是无效的,因为在主查询中您聚合 (COUNT(max_doc_line_num)),但还选择了缺少 GROUP BY 子句或聚合的 op_code。
话虽如此,您可能正在寻找这个:
SELECT op_code, COUNT(max_doc_line_num) AS "TOTAL RECS"
FROM
(
SELECT op_code, doc_num, MAX(doc_line_num) AS max_doc_line_num
FROM c_lab
WHERE comp_code = 'P1' AND op_code = 'CHRISTIANMONTALVO'
GROUP BY op_code, doc_num
)
GROUP BY op_code
ORDER BY op_code;
但也许你想要一些完全不同的东西。我不知道。我的建议:不要使用 Oracle 的快捷方式在不使用子查询的情况下再次聚合所有聚合行。使用子查询,意图明确,不会发生此类语法错误。