好的,这是到目前为止我存储的过程。
ALTER Procedure GetJobInfo()
AS
BEGIN
Select EmployeeId, FirstName, LastName
From dbo.Employees
for EmployeeId
SELECT ComputerCodeId
From dbo.EmployeeJobs
Where ComputerCodeId = "F"
END
我需要获取已经完成的员工,但是然后我需要从dbo.EmployeeJobs表中获取与计算机代码数组匹配的员工作业。我将如何去做这样的事情?我的最终目标是能够创建一个报告,该报告根据与员工相关的计算机代码将其分为两个类别,然后获取这两个类别的总和并让它们填充两个不同的列。
答案 0 :(得分:1)
我不确定要了解什么,但是您有两个选择。
如果表EmployeeJobs包含列EmployeeId,请尝试使用此选项。
SELECT EJ.ComputerCodeId , E.EmployeeId, E.FirstName, E.LastName FROM dbo.EmployeeJobs As EJ INNER JOIN dbo.Employees As E ON EJ.EmployeeId = E.EmployeeId WHERE EJ.ComputerCodeId = 'F'
否则,如果您无法匹配EmployeeId,则可以使用以下内容,这将按ComputerCodeId进行筛选,并按每个员工进行交叉。
SELECT EJ.ComputerCodeId , E.EmployeeId, E.FirstName, E.LastName
FROM dbo.EmployeeJobs As EJ, dbo.Employees As E
WHERE EJ.ComputerCodeId = 'F'
答案 1 :(得分:0)
您可以尝试加入而不是for循环
ALTER Procedure GetJobInfo()
AS
BEGIN
SELECT EmployeeId, FirstName, LastName
FROM dbo.Employees E
INNER JOIN dbo.EmployeeJobs EJ
ON E.EmployeeId = EJ.EmployeeId
Where EJ.ComputerCodeId = "F"
END
答案 2 :(得分:0)
您需要查看sql的while loop。
它将提供您所需要的内容,并且是在查询中使用循环的方法。
基本语法是 :
DECLARE @cnt INT = 0;
WHILE @cnt < cnt_total
BEGIN
{...statements...}
SET @cnt = @cnt + 1;
END
,此示例将模拟 for loop
:
DECLARE @cnt INT = 0;
WHILE @cnt < 10
BEGIN
PRINT 'Inside simulated FOR LOOP on TechOnTheNet.com';
SET @cnt = @cnt + 1;
END;
PRINT 'Done simulated FOR LOOP on TechOnTheNet.com';
GO
您可以在Microsoft Docs中找到有关WHILE
循环的更多信息。
调查并阅读有关内容,然后试一试。
编辑:有关其他方法,请查看SQL Server FOR EACH Loop帖子。