0

我正在使用 DB2,当它返回多个列时,它显然不允许您使用 GROUP BY 子句。我的记录具有重复的 ID 和名称值,例如:

EmpID  |  -   name  -   |  code  
___________________________________
111111    |    Williams   |   1 
---------------------------------   
111111    |    Williams   |   2   
----------------------------------
111112    |    Davis      |   3   
---------------------------------
111113    |    Gomez      |   1  
----------------------------------
111113    |    Gomez      |   3
----------------------------------

(请原谅我的格式)我需要为每个员工获取一个带有代码的实例(只要每个员工出现一个代码实例就可以忽略哪个代码实例)。

通常我可以这样做:

SELECT * FROM employees GROUP BY EmpID;

出于某种原因,DB2 不允许您这样做。它说“分组不一致”。你可以做:

SELECT EmpID from employees GROUP BY EmpID; 

但是如果你引入更多的返回值,那么它会给你错误。

我尝试研究使用子查询和派生表,但我不确定如何组合它以仅选择一个代码值并排除具有重复员工值的记录。如果有人有答案或可以将我指向另一个解决此问题的线程,我将非常感激。

4

1 回答 1

11

在大多数数据库中,列表中不在聚合函数中的GROUP BY每一列都是必需的,这就是您收到错误消息的原因。SELECT

对于您的情况,如果返回的值无关紧要code,那么您可以使用聚合函数并按以下方式分组:

SELECT EmpID, name, MIN(code) code
FROM employees 
GROUP BY EmpID, name; 

演示

group by 应用于EmpIdand name,而聚合函数应用于code列。


请注意,由于这个原因,EmpID并且name在功能上相互依赖(据我们从您发布的示例和“重复值”评论中可以看出),以下两个查询将返回与上述查询相同的结果:

--- GROUP BY EmpID
------------------
SELECT EmpID, MIN(name) name, MIN(code) code
FROM employees 
GROUP BY EmpID; 


--- GROUP BY name
-----------------
SELECT MIN(EmpID) EmpID, name, MIN(code) code
FROM employees 
GROUP BY name;  
于 2013-05-17T15:01:54.770 回答