繁体   English   中英

按两位列分组

[英]Grouping by two bit columns

我想将值设为true的GROUP BY两位列。 但是我有两列分开,如何在位列为真的情况下加入它们?

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

您可以将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;

如果employee_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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM