如何选择具有多个条件的值

时间:2021-05-18 13:47:01

标签: sql sql-server

tbl_A 有 4 列 OrgID、EmpID、Time、Status,tbl_B 有 2 列 OrgID、Threshold。 条件:

  1. 如果阈值时间(来自 tbl_A)大于当前时间,则应打印 OrgID。

一个 OrgID 可能有多个 EmpID,因此如果第一个 EmpID(在同一 OrgID 下)验证时间大于当前时间,则我们必须一一检查验证,然后无需检查第二个 EmpID,只需直接打印 OrgID。< /p>

tbl_status:

OrgID   EmpID   Time                         Status  
100     1       2021-05-18 00:00:00.000       A     
100     2       2021-05-18 00:00:00.000       B   
100     3       2021-05-18 00:00:00.000       A
200     1       2021-05-18 00:00:00.000       A      
200     2       2021-05-18 00:00:00.000       A     

tbl_hold:

OrgID  Threshold
100       0
200       10
 

如果阈值为 0 则不验证任何条件,只打印 OrgID,但如果有阈值,则应首先检查第一个 EmpID,如果符合条件,则无需检查其余 EmpID 的条件。

输出:

OrgID
100
200

因为对于 OrgID 100,我首先检查阈值为 0,所以不需要任何条件,它会被打印出来。 但是 OrgID 200 有阈值,所以我检查了它有 2 个 EmpID。所以首先我对 200 个 OrgID 的第一个 EmpID 进行了验证,它验证了条件并且它起作用了。

1 个答案:

答案 0 :(得分:1)

SELECT DISTINCT a.OrgID
FROM tbl_A a
  INNER JOIN tbl_B b
    ON a.OrgID = b.OrgID
WHERE b.Threshold = 0
   OR DATEDIFF(minute, GETDATE(), a.Time) > b.Threshold