2013-08-27 50 views
0
/*Displays employees’ last names and the Job Title and GROUP Job Title*/ 

USE [EXAMPLEDB] 
SELECT empLName 
FROM tblEmployee 

这里是我困惑的地方,我如何使用两个不同的表来包含员工姓氏和其他员工职位名称?SQL - 如何GROUP BY

SELECT jobTitle 
FROM tblJobTitle 
GROUP BY jobTitle 

这些都是我的表:

--This Code Creates the Job Title Table-- 

CREATE TABLE [SHATTKudlerFineFoods].dbo.tblJobTitle 
(
jobJobID varchar (4) CONSTRAINT PK_jobJobID PRIMARY KEY Not Null, 
jobJobClass varchar (60) Not Null, 
jobTitle varchar (60) Not Null, 
jobDescription varchar (300) Not Null, 
jobStatus varchar (11) Not Null 
) 

--This Code Creates the Employee Table-- 

CREATE TABLE [SHATTKudlerFineFoods].dbo.tblEmployee 
(
empEmpID varchar (3) CONSTRAINT PK_empEmployeeID PRIMARY KEY Not Null, 
empLName varchar (20) Not Null, 
empFName varchar (15) Not Null, 
empAddress varchar (30) Not Null, 
empCity varchar (20) Not Null, 
empState varchar (2) Not Null, 
empZIPCode varchar (5) Not Null, 
empAreaCode varchar (3) Not Null, 
empPhoneNo varchar (8) Not Null, 
empGender varchar (1) Not Null, 
empDOB smalldatetime Not Null, 
empAge Tinyint Not Null, 
empHireDate smalldatetime Not Null, 
empNoOfExempt Tinyint Not Null, 
empMaritalStatus varchar (3) Not Null, 
empSalary money Not Null, 
empStoreID varchar (4) CONSTRAINT FK_strStoreID FOREIGN KEY REFERENCES 
tblStores(strStoreID) Not Null, 
empJobID varchar (4) CONSTRAINT FK_jobJobID FOREIGN KEY REFERENCES 
tblJobTitle(jobJobID) Not Null 
) 
+0

您将需要使用连接从多个表中获取数据。如果你需要每个职位的所有员工的姓名,你将不得不使用GROUP_CONCAT(在mysql中,但不是标准sql的一部分) – bmorgan21

+0

与答案没有关系,但是..而不是'GROUP BY',你可以使用'DISTINCT' ...'GROUP BY'更适合聚合 –

回答

5

你应该JOIN表:

SELECT jobTitle 
FROM tblJobTitle jt 
INNER JOIN tblEmployee e on e.JobID = jt.ID 
GROUP BY jobTitle 

JobIDtblEmployee一列,它是参照jobTitle主键列(ID或不管)

0

这不是一个群组,而是一个连接。

为了加入,列出所有的表在FROM子句中,像这样:

SELECT emp.empLName, job.jobTitle FROM tblEmployee emp, tblJob job 

注意这不会做你想要什么,虽然,因为需要有一个连接条件在两个表中的列上。按照原样,该选择将为每个员工姓名输出每个职位一次。例如,如果有10个标题和100个员工,则会获得1000个结果。

如果连接列在表tblEmployeeid,并emp_idtblJob表,这是完整的查询中使用:

SELECT emp.empLName, job.jobTitle FROM tblEmployee emp, tblJob job WHERE emp.id = job.emp_id 

注意group by用于汇总结果。例如,如果select为每个员工返回5行,并且您希望只有一行在其中一列上具有平均值,则group by是要使用的工具。