首页 > 解决方案 > 如何选择具有多个条件的值

问题描述

tbl_A 有 4 列 OrgID、EmpID、Time、Status,tbl_B 有 2 列 OrgID、Threshold。健康)状况:

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

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

tbl_状态:

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 进行了验证,它验证了条件并且它有效。

标签: sqlsql-server

解决方案


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

推荐阅读