简体   繁体   English

SQL-Oracle:解决基本问题的困难

[英]SQL-Oracle: Difficulties in resolving basic problems

Create a query to display the total number of employees and, of that total, the number of employees hired in 2005, 2006, 2007, and 2008. Create appropiate column headings. 创建一个查询以显示雇员总数,以及该总数,其中显示2005、2006、2007和2008年雇用的雇员数。创建适当的列标题。

So far i have managed to do this: 到目前为止,我已经做到了:

SELECT COUNT(DISTINCT employee_id) AS "Total",
   (CASE WHEN hire_date BETWEEN '01-01-2005' AND '31-12-2005' THEN '2005'
       WHEN hire_date BETWEEN  '01-01-2006' AND '31-12-2006' THEN '2006'
       WHEN hire_date BETWEEN  '01-01-2007' AND '31-12-2007' THEN '2007'
       WHEN hire_date BETWEEN  '01-01-2008' AND '31-12-2008' THEN '2008'
       ELSE 'Out of Range'
       END ) AS "Years"
FROM   employees
WHERE  hire_date BETWEEN '31-12-2005' AND '01-01-2008'
GROUP BY hire_date;

But the output is not as it should be. 但是输出不是应该的。 Can't upload pictures due to my low reputation to see exactly what i mean :). 由于我的声誉低而无法上传图片,以准确了解我的意思:)。 Anyway, any suggestions please? 无论如何,有什么建议吗?

You should Use format like this yyyy-MM-dd 您应该使用类似yyyy-MM-dd格式

SELECT COUNT(DISTINCT employee_id) AS "Total",
SUM( CASE WHEN hire_date BETWEEN '2005-01-01' AND '2005-12-31' THEN 1 else 0 end) as   
'2005', 
SUM( CASE WHEN hire_date BETWEEN '2006-01-01' AND '2006-12-31' THEN 1 else 0 end) as 
'2006',
SUM( CASE WHEN hire_date BETWEEN '2007-01-01' AND '2007-12-31' THEN 1 else 0 end) as 
'2007',
SUM( CASE WHEN hire_date BETWEEN '2008-01-01' AND '2008-12-31' THEN 1 else 0 end) as 
'2008',
SUM( CASE WHEN hire_date < '2005-01-01' OR  hire_date > '31-12-2008' 
THEN 1 else 0 end) as 
"Out of Range"
FROM   employees

You can probably change your query to something like 您可以将查询更改为

SELECT COUNT(employee_id) AS "Total",
SUM(case when hire_date BETWEEN '01-01-2005' AND '31-12-2005' THEN 1 else 0 end) as '2005',
SUM(case WHEN hire_date BETWEEN  '01-01-2006' AND '31-12-2006' THEN 1 else 0 end) as '2006',
SUM(case WHEN hire_date BETWEEN  '01-01-2008' AND '31-12-2008' THEN 1 else 0 end) as '2008',
SUM(case WHEN hire_date BETWEEN  '01-01-2007' AND '31-12-2007' THEN 1 else 0 end) as '2007'
FROM   employees
GROUP BY hire_date;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM