给出以下表结构和示例数据:
+-------------+------+-------------+
| EmployeeID | Name | WorkWeek |
+--------------+-------+-----------+
| 1 | A | 1 |
| 2 | B | 1 |
| 2 | B | 2 |
| 3 | C | 1 |
| 3 | C | 2 |
| 4 | D | 2 |
+--------------+-------+-----------+
我希望选择仅在第1周工作的所有员工(因此在此示例中,仅返回employeeid = 1
。我可以使用以下查询获取数据:
SELECT EmployeeId, Name
FROM SomeTable
GROUP BY EmployeeId, Name
HAVING SUM ( WorkWeek ) = 1;
对我来说,HAVING SUM( WorkWeek ) = 1
是一个黑客,这应该用某种形式的GROUP BY
和COUNT
处理,但我无法理解该查询的结构。
任何帮助都会有用且具有启发性。
答案 0 :(得分:2)
HAVING SUM( WorkWeek ) = 1
可能适用于第1周或第2周,但第3周会失败(因为1 + 2 = 3)。
使用NOT EXISTS
运算符代替子查询:
SELECT EmployeeId, Name
FROM SomeTable t1
WHERE NOT EXISTS (
SELECT * FROM SomeTable t2
WHERE t1.EmployeeId = t2.EmployeeId
AND t2.WorkWeek <> 1
)
答案 1 :(得分:0)