Sql server SQL Server中的For循环

Sql server SQL Server中的For循环,sql-server,Sql Server,数据库中的EmpId总数=74。 数据库中2013年9月的有效天数=22 我想在MIS_Opus表中分离员工未完成生产的日期 因为完全外部联接不起作用,所以我使用except查询。通过这个查询,我可以通过c#函数传递empid来获取每个员工的未填写日期。对于该循环,将返回SQL并返回C#74次。请让我知道如何在SQL中一次性获得所有员工的未填写日期。我正在使用SQL 2012和VS 2012 c# 谢谢, select _Date from MIS_BM_Calendar c where c.M

数据库中的EmpId总数=74。 数据库中2013年9月的有效天数=22 我想在MIS_Opus表中分离员工未完成生产的日期

因为完全外部联接不起作用,所以我使用except查询。通过这个查询,我可以通过c#函数传递empid来获取每个员工的未填写日期。对于该循环,将返回SQL并返回C#74次。请让我知道如何在SQL中一次性获得所有员工的未填写日期。我正在使用SQL 2012和VS 2012 c#

谢谢,

select _Date from MIS_BM_Calendar c
where c.Month = 'September 2013'  and c.DayShiftStatus = 'active'
except
select _Date from MIS_Opus o
where o.EmpId=@Empid

一种方法是使用
交叉联接
构建所有员工+天数组合的列表。然后,您可以使用
左联接
检查当天是否有员工条目

select  days._Date as TheDay
,       emps.EmpId as EmployeeWithMissingEntry
from    (
        select  distinct _Date
        from    MIS_BM_Calendar
        where   Month = 'September 2013'
                and DayShiftStatus = 'active'
        ) days
cross join -- One row for each combination of employee and date
        (
        select  distinct EmpId
        from    MIS_Opus
        ) emps
left join
        MIS_Opus o
on      o._Date = days._Date
        and o.EmpId = emps.EmpId
where   o._Date is null -- Employee entry for day not found

一种方法是使用
交叉联接
构建所有员工+天数组合的列表。然后,您可以使用
左联接
检查当天是否有员工条目

select  days._Date as TheDay
,       emps.EmpId as EmployeeWithMissingEntry
from    (
        select  distinct _Date
        from    MIS_BM_Calendar
        where   Month = 'September 2013'
                and DayShiftStatus = 'active'
        ) days
cross join -- One row for each combination of employee and date
        (
        select  distinct EmpId
        from    MIS_Opus
        ) emps
left join
        MIS_Opus o
on      o._Date = days._Date
        and o.EmpId = emps.EmpId
where   o._Date is null -- Employee entry for day not found

我们在SQL中不为循环编写代码,我们尽量避免编写循环。SQL(通常)是一种声明性的、基于集合的语言—您可以告诉系统整个结果集应该是什么样子,它可以确定是否使用循环、哈希表等来构建结果集。我们不在SQL中为循环编写代码—我们尽量避免编写循环。SQL(通常)是一种声明性的、基于集合的语言—您可以告诉系统整个结果集应该是什么样子,它可以确定是否使用循环、哈希表等来构建结果集。非常感谢Andomar。这个查询向我展示了一种非常不同的编程思维方式。非常感谢Andomar。这个查询向我展示了一种非常不同的态度,即如何以编程方式进行思考。