SQL Server循环协助

时间:2018-08-06 05:33:14

标签: sql sql-server

好的,这是到目前为止我存储的过程。

    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表中获取与计算机代码数组匹配的员工作业。我将如何去做这样的事情?我的最终目标是能够创建一个报告,该报告根据与员工相关的计算机代码将其分为两个类别,然后获取这两个类别的总和并让它们填充两个不同的列。

3 个答案:

答案 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帖子。