2017-04-18 151 views
0

我想GROUP BY两位列的值为true。但我有两列分开,我怎么能加入他们的位列是真实的?输出按两位列分组

SELECT  employees.employee_id, employees.last_name, 
      employees.first_name, employees.middle_name, 
      employee_role.isAdmin, employee_role.isEmployee 
FROM  employees 
INNER JOIN employee_role ON employee_role.employee_id = employees.id 
INNER JOIN passwords ON passwords.id = employees.password_id 
WHERE  employees.employee_id = pIN_employeeId AND passwords.password = pIN_password; 

草案:

employee_id | last_name | first_name | middle_name | isAdmin | isEmployee 
------------+-----------+------------+-------------+---------+------------ 
    20140540 | Armstrong | Billie Joe |  A  | 0  | 1 
    20140540 | Armstrong | Billie Joe |  A  | 1  | 0 

预期输出:

employee_id | last_name | first_name | middle_name | isAdmin | isEmployee 
------------+-----------+------------+-------------+---------+------------ 
    20140540 | Armstrong | Billie Joe |  A  | 1  | 1 

回答

2

你可以使用MaxGROUP BY

SELECT  employees.employee_id, employees.last_name, 
      employees.first_name, employees.middle_name, 
      Max(employee_role.isAdmin), 
      Max(employee_role.isEmployee) 
FROM  employees 
INNER JOIN employee_role ON employee_role.employee_id = employees.id 
INNER JOIN passwords  ON passwords.id = employees.password_id 
WHERE  employees.employee_id = pIN_employeeId AND passwords.password = pIN_password 
GROUP BY employees.employee_id; 

如果EMPL oyee_id不是主键,你将需要添加其他列的GROUP BY子句中还有:

GROUP BY employees.employee_id, employees.last_name, 
      employees.first_name, employees.middle_name; 

在其他数据库甚至需要添加这些列。

如果你只希望包括具有与isAdmin位集的记录,并且还具有与isEmployee集的记录,排除所有其他情况下的员工,然后添加HAVING条款是这样的:

SELECT  employees.employee_id, employees.last_name, 
      employees.first_name, employees.middle_name, 
      Max(employee_role.isAdmin), 
      Max(employee_role.isEmployee) 
FROM  employees 
INNER JOIN employee_role ON employee_role.employee_id = employees.id 
INNER JOIN passwords  ON passwords.id = employees.password_id 
WHERE  employees.employee_id = pIN_employeeId AND passwords.password = pIN_password 
GROUP BY employees.employee_id 
HAVING  Max(employee_role.isAdmin) = 1 
AND  Max(employee_role.isEmployee) = 1; 
+0

我收到了一个异常,其中SELECT列表不在GROUP BY子句中。 – Francisunoxx

+0

然后,您还需要提及'GROUP BY'子句中的其他非最大列。请参阅我在答案中添加的额外段落。 – trincot

+0

非常感谢。我看到我错了。我需要在'MAX BY'和'MIN'功能的帮助下为另一列'GROUP BY'。 'GROUP BY'也做了这个诀窍:) – Francisunoxx