2017-04-18 83 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