2013-02-11 67 views
2

我對sql很新,我很努力地創建一個查詢。我有一個表Dept_Employee初學者sql連接查詢

DeptId EmployeeId Salary  JoinDate (DD-MM-YYYY) 
    ------------------------------------------------------------ 
    1   77   8787   11-09-2010 
    1   87   9877   12-08-2011 
    1   76   9544   08-11-2010 
    2   33   9999   12-05-2010 

,我想從這個創建一個新表DEPTID和新的列boolean值,2010年1月12日之前joindate返回true,如果在同一個部門的所有員工(十二月1)及其工資應大於8000的所以在這種情況下,結果應該是

DeptId  NewEmployees 
    ------------------------ 
    1   False 
    2   True 

什麼是做到這一點的最好方法是什麼?我應該自己加入嗎?或者還有其他方法可以做到嗎?請任何人都可以提出一些建議...

Jeena。

+0

既然你說你是新人,我聽說過這本書的好處,在10分鐘內自學SQL。此外,由於您希望創建可能會複製數據的表,因此您可能需要查看僅供參考的數據庫設計。 – 2013-02-11 12:52:22

回答

5

SQL CASE是你的朋友。

你能做到這一點的方式如下:

SELECT DeptId, CASE WHEN MIN(Salary) > 8000 AND MAX(JoinDate) <= DATE'2010-12-01' THEN True 
       ELSE FALSE 
       END AS NewEmployees 
    FROM Dept_Employee 
    GROUP BY DeptId 

注意,我認爲是12月份和01日在你的問題。

+0

是12是月份。我能夠創建查詢的第一部分,但groupby錯過了它爲什麼不起作用。我現在要試一試。謝謝你sooo much @Benoit – Jeena 2013-02-11 12:59:38

+0

好的。這是一種魅力!但是現在我意識到deptName還有一個列,我想再檢查一次true或false。該DeptName應該是管理員或IT。我試圖用DeptName Like條件擴展上面的內容,但我得到異常00979. 00000 - 「不是GROUP BY表達式」任何想法爲什麼? – Jeena 2013-02-11 13:11:06

+0

@Jeena:如果每個DeptId只有一個DeptName的可能值,那麼在GROUP BY子句中包含'DeptName'。 – Benoit 2013-02-11 14:01:16