如何根据筛选表筛选表

时间:2018-05-26 11:32:55

标签: sql-server rowfilter

我有一个包含运动代码列表的代码表。我还有另一张表格,其中包含可能包含多个体育代码的工作人员列表。

我想只返回体育代码可以在代码表中覆盖的工作人员。

像这样:

sample

在这种情况下,Jason拥有代码表中的每个代码,Jackson是一个代码短代码(codeID 3)所以只有Jason才会返回。

Declare @code table
              (
                  codeID varchar(4),
                  codeDes varchar(72)
                  Primary Key(codeID, codeDes)
              )

Insert into @code
Values ('1', 'apple picking'), ('2', 'pear picking'), ('3', 'farming')

Declare @staff table
               (
                   staffID int,
                   name varchar(8),
                   codeID varchar(4)
               )

Insert into @staff
Values (1, 'Jason', '1'), (1, 'Jason', '2'), 
       (1, 'Jason', '3'), (1, 'Jason', '4'), 
       (2, 'Jackson', '1'), (2, 'Jackson', '2')

1 个答案:

答案 0 :(得分:0)

您可以尝试以下样本假设,员工持有唯一代码。

SELECT staffId, Name
FROM @staff  s
INNER JOIN @code c ON c.codeID = s.codeID
GROUP BY StaffId, Name
HAVING COUNT(DISTINCT s.CodeId) = (SELECT COUNT(1) FROM @code)