SELECT 条基于条件的记录

SELECT records based on criteria

我正在寻找一种方法来 select 基于条件的 ID (PersonID)。如果这个 personID 不符合条件,我需要 select 另一个。为了使其可视化,我有两个 tables: 1.

ID     Company  LatestOrder
50593   TEST    1
10955   TEST    2

2.

  ID    Criteria_A  Criteria_B   
 50593    1          0 
 10955    0          0

我需要找到一种从 `table1 到 SELECT ID 的方法 latestOrder = 1 检查此人是否符合 table 2 的条件(任何值 1标准 A 或 B),然后如果是,select 来自 table1 且 latestOrder = 2 的 ID。

并且检查条件只要table1.lastorder > 0.

有道理吗?我一直被 CASE、IIF、CTA 困扰,但我似乎找不到工作的方法。我希望有人能阐明我应该朝哪个功能方向发展。

非常感谢大家的帮助!这是第三个版本:(

这是我到目前为止的进展:

WITH LastOrdered AS  
(
            SELECT 
                OrderBillToID AS PersonID
            ,   OrderDate
            ,   OrderBillToCompanyID AS CompanyID
            ,   OrderBillToCompany
            ,   ROW_NUMBER() OVER(PARTITION BY ODE.OrderBilltoCompanyID ORDER BY ODE.OrderDate DESC) AS LatestOrder
            FROM dbo.OrderDetails ODE
            INNER JOIN dbo.Persons PER ON ODE.OrderBillToID = PER.ID AND PER.Segment = 'B' AND ODE.OrderBillToCompanyID IS NOT NULL

)

第二次尝试

SELECT
 PER.ID
 ,  PER.Company
 ,  LatestOrder
 ,  CASE WHEN PER.ExcludeAll = 0 AND (PER.Age > 17 OR PER.Age = 0) AND PER.DateOfDeath = '1900-01-01' AND PER.TLC = 'NA' AND PER.BulkAskExclude = 0 AND PER.EmailExclude = 0 THEN LastOrder
 ....here is when I realised that this case won't work.....
FROM dbo.Persons PER
  INNER JOIN LastOrdered LO ON LO.PersonID = PER.ID     

预期输出为:

ID     Company  
10955   TEST    

......

基本上,你想要最后一个下单但未下单的人不满足Table2中的任何条件:

SELECT TOP 1
    id, Company
FROM Table1
WHERE
    id NOT IN(
        SELECT id
        FROM Table2
        WHERE 
            Criteria_A = 1
            OR Criteria_B = 1
    )
ORDER BY LatestOrder DESC