sql - 将查询转换为SQL Server语法

标签 sql sql-server database syntax-error

我一直在从Chegg获得帮助,大多数给我的答案对我来说都不起作用。我的第一个任务是编写查询,在其中列出时间最多的项目。

一个回应是:

Select project.Proj_ID , proj_Name from Project inner join work_period on Project.Proj_ID = work_period.Proj_Id group by project.Proj_ID , proj_Name having count(weekly_work_hrs) = max(count(weekly_work_hrs));

错误我得到:

讯息130,第15级,州1,第1行
无法对包含聚合或子查询的表达式执行聚合功能。

第二个回应是
CREATE VIEW project_with_most_hours AS
select w1.proj_id
from work_period w1   
group by w1.proj_id   
having sum(w1.weekly_work_hrs) = (select max(sum(w2.weekly_work_hrs)) from work_period w2 group by w2.proj_id);

我得到的错误是:

消息130,级别15,状态1,过程project_with_most_hours,第5行[批处理开始第0行]
无法对包含聚合或子查询的表达式执行聚合功能。

我正在寻找的最终结果是,该控制台仅显示1个Proj_ID或proj_name,这是该项目中所有员工的总工作时间加起来后得出的工作时间最多的。

非常感谢您对如何解决这些查询之一的任何帮助

这是创建数据库的脚本(如果有帮助的话)
create table department
(
  dept_ID int not null ,
  dept_name char(50) NOT NULL,
  manager_ID int not null,
  manager_start_date date not null,

  constraint Dept_PK primary key (dept_ID),
  constraint D_Name_AK unique (dept_name)
);
insert into department values(1,'abc',1,'2019-01-08');
insert into department values(2,'abc2',2,'2019-01-08');
insert into department values(3,'abc3',2,'2019-01-08');
insert into department values(4,'abc4',2,'2019-01-08');

/*project table done*/
create table project
(
  proj_ID int not null,
  proj_name varchar(20) not null,
  dept_ID int not null,
  proj_location varchar(20) not null,

  constraint Proj_ID_PK primary key (proj_ID),
  constraint Proj_Dep_FK foreign key (dept_ID) references department(dept_ID)
);
insert into project values ( 1,'project1',1,'india');
insert into project values ( 2,'project2',2,'US');

/*employee table done*/
create table employee
(
  emp_ID int NOT NULL ,
  emp_name char(50) not null,
  emp_ssn char(11) not null,
  emp_address char(50) not null,
  salary decimal(10,2) not null,
  sex char(1) not null,
  date_of_birth date not null,
  dept_ID int not null,
  supervisor_ID int null,

  constraint emp_PK primary key(emp_ID),
  constraint emp_Name_AK unique (emp_name),
  constraint emp_SSN_AK unique (emp_ssn),
  constraint sup_FK foreign key(supervisor_ID) references employee(emp_ID),
  constraint empDep_FK foreign key(dept_ID) references department(dept_ID)
);

insert into employee values( 1,'jagmeet', 'ssn','patel nagar',300,'M','1997-07-01',1,1);

insert into employee values( 2,'harpreet', 'ssn1','patel nagar2',300,'F','1997-07-01',1,2);
/*Department location table done*/
create table dept_location
(
  dept_ID int not null,
  location char(50) not null,

  constraint dept_location_PK primary key(dept_ID, location),
  constraint dept_FK foreign key (dept_ID) references department(dept_ID)
);
insert into dept_location values(1,'loc1');

insert into dept_location values(2,'loc2');

/*dependent table done*/
create table dependent
(
  dependent_ID int not null ,
  emp_ID int NOT NULL,
  dependent_name varchar(20) NOT NULL,
  dependent_sex char(1) NOT NULL,
  dependent_DOB date not null,
  dep_relation varchar(10) not null,

  constraint dep_ID_PK primary key (dependent_ID),
  constraint deb_emp_ID_FK foreign key (emp_ID) references employee(emp_ID)
);
insert into dependent values (1,2,'deptname','M','2018-01-09','rel1');

insert into dependent values (2,1,'deptname2','F','2018-01-09','rel2');
/*work period table done*/

create table work_period
(
  emp_ID int NOT NULL,
  proj_ID int not null,
  pay_period date not null,
  weekly_work_hrs int not null,

  constraint pay_period_PK primary key (pay_period),
  constraint WP_empID_FK foreign key (emp_ID) references employee(emp_ID),
  constraint WP_projID_FK foreign key (proj_ID) references project(proj_ID)
);
insert into work_period values(1,1,'2012-09-01',7);

insert into work_period values(2,2,'2014-09-01',8);

最佳答案

使用CTE,查询仅显示每周工作时间与max相匹配的数据

;
WITH cte
AS (SELECT
  project.Proj_ID,
  proj_Name,
  SUM(weekly_work_hrs) sumofhrs
FROM Project
INNER JOIN work_period
  ON Project.Proj_ID = work_period.Proj_Id
GROUP BY project.Proj_ID,
         proj_Name)
SELECT
  *
FROM cte
WHERE sumofhrs = (SELECT
  MAX(sumofhrs)
FROM cte)

关于sql - 将查询转换为SQL Server语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59042493/

相关文章:

mysql - SQL中的Count语句会减慢查询速度

sql - PostgreSQL 中的赋值操作是原子的吗?

mysql - 如何在两个表上执行 MYSQL 连接,其中第二个表的外键值的条件也可以为空

sql - App=EntityFramework 在Sql 连接字符串中做了什么?

c# - 与数据库的父子进程通信的最佳设计

ArchLinux中Mongodb无法导出数据

php - 如何将值插入到现有表的列中

sql-server - 下载所有 SSRS 报告

sql-server - 创建表时的条件

database - 在 PostgreSQL 中自动备份数据库