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
我正在寻找一种方法来 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