Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将缺少的值从查找表插入到事务表_Sql_Sql Server 2008_Tsql - Fatal编程技术网

SQL将缺少的值从查找表插入到事务表

SQL将缺少的值从查找表插入到事务表,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有一个表格EmpJob,列出了Employee、Job done和完成工作的次数列:EmpID、JobID、Total。我还有另一个查找表Jobs,它列出了所有Jobs列:JobID、JobDesc。员工不可能完成所有工作。我的要求是显示所有员工,显示所有未完成工作计数为零的工作。 我对此一无所知。我尝试在WHERE子句中使用IF-EXISTS子句或NOT-EXISTS子句,但这并没有给出正确的结果。 下面是一个例子: 作业表: EmpJob表: 结果应该是3个工作x 2个员工=6个记录,如下

我有一个表格EmpJob,列出了Employee、Job done和完成工作的次数列:EmpID、JobID、Total。我还有另一个查找表Jobs,它列出了所有Jobs列:JobID、JobDesc。员工不可能完成所有工作。我的要求是显示所有员工,显示所有未完成工作计数为零的工作。 我对此一无所知。我尝试在WHERE子句中使用IF-EXISTS子句或NOT-EXISTS子句,但这并没有给出正确的结果。 下面是一个例子: 作业表:

EmpJob表:

结果应该是3个工作x 2个员工=6个记录,如下所示


有人能提出疑问吗?提前感谢。

要遵循的策略草图:

获取员工集:如果没有其他员工来源

select distinct EmpID from EmpJob // query1 获得工作和员工的叉积:

select EmpID,JobID,0 as Total from <query1> outer join Jobs // query2 对已知计数和0计数进行并集:

select EmpID,JobID,Total from EmpJob union <query2> // query3 汇总每个员工、工作组的总数

select EmpID,JobID,sum(Total) from <query3> group by EmpID,JobID
将这些部分放在一起会得到一个结果:

在作业上使用左外部联接时,总共0行的EmpID和JobID为空。 select EmpID, JobID, sum(Total) as Total from ( (select EmpID, JobID, 0 as Total from Jobs outer join (select distinct EmpID from EmpJob)) union (select EmpID, JobID, Total from EmpJob) ) group by EmpID, JobID order by EmpID, JobID select EmpID,JobID,Total from EmpJob union <query2> // query3 select EmpID,JobID,sum(Total) from <query3> group by EmpID,JobID select EmpID, JobID, sum(Total) as Total from ( (select EmpID, JobID, 0 as Total from Jobs outer join (select distinct EmpID from EmpJob)) union (select EmpID, JobID, Total from EmpJob) ) group by EmpID, JobID order by EmpID, JobID