2017-07-26 47 views
0

如下表結構和樣本數據:與組篩選查詢基於列未在GROUP BY語句

+-------------+------+-------------+ | 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 BYCOUNT來處理,但是我無法圍繞如何構建該查詢來包裝我的頭。

任何幫助將是非常有用和啓發。

回答

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 
) 
0

其實,這也正是爲什麼​​條款是 - 根據彙總值篩選記錄。

w3schools sql tutorial

加入HAVING子句SQL,因爲WHERE關鍵字無法與合計函數一起使用。

+0

我不反對使用'HAVING'是必要的,它只是似乎是「正確」的方式做,這將是'HAVING COUNT(*)= 1'而不是使用SUM來合計Week列 – Gimbl