初学者sql连接查询
我对sql非常陌生,我正在努力创建一个查询。我有一个餐桌部的员工初学者sql连接查询,sql,Sql,我对sql非常陌生,我正在努力创建一个查询。我有一个餐桌部的员工 DeptId EmployeeId Salary JoinDate (DD-MM-YYYY) ------------------------------------------------------------ 1 77 8787 11-09-2010 1 87 9877
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和一个新的布尔列,如果同一部门中的所有员工在2010年12月1日(12月1日)之前都有joindate,并且他们的工资应该大于8000,则返回true。所以在这种情况下,结果应该是
DeptId NewEmployees
------------------------
1 False
2 True
最好的方法是什么?我应该做自我加入吗??或者有没有其他办法?有人能给我提点建议吗
吉娜。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
选择DeptId,CASE WHEN MIN(Salary)>8000和MAX(JoinDate)既然你说你是新来的,我听说过这本书的好处,在10分钟内自学SQL。另外,由于您想创建一个可能会复制数据的表,所以您可能想检查一下数据库的设计是否只针对普通人。是的,12是一个月。我能够创建查询的第一部分,但缺少groupby,这就是为什么它不起作用。我现在要试试。非常感谢你@BenoitOk。这是一种魅力!!但现在我意识到deptName还有一列,我想再检查一下是真是假。该DeptName应该是Admin或IT。我试图用类似DeptName的条件扩展上述内容,但我得到了异常00979。00000-“不是一个GROUP BY表达式”知道为什么吗???@Jeena:如果每个DeptId只有一个可能的DeptName值,那么在GROUP BY子句中包含DeptName
。问题是DeptName可以有多个值,但是如果所有的DeptName=“Admin”和MIN(Salary)>8000和MAX(JoinDate)都使用了HAVING COUNT,我想得到true(不同的部门名称)=1
和以及MAX(部门名称)=“Admin”