2013-02-11 69 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