Sql 根据条件选择记录
我正在寻找一种根据标准选择ID(PersonID)的方法。如果这个人不符合标准,我需要选择另一个。为了使其可视化,我有两个表: 一, 二, 我需要找到一种方法,从``table1 withSql 根据条件选择记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在寻找一种根据标准选择ID(PersonID)的方法。如果这个人不符合标准,我需要选择另一个。为了使其可视化,我有两个表: 一, 二, 我需要找到一种方法,从``table1 withlatestOrder=1中选择ID,检查此人是否符合表2中的标准(任何标准a或B的值为1),然后如果是,从table1 with latestOrder=2中选择ID 并检查条件,只要table1.lastorder>0 这有意义吗?我一直被CASE's和IIF's,CTA's困扰,但我似乎找不到工作的方法。
latestOrder=1
中选择ID,检查此人是否符合表2中的标准(任何标准a或B的值为1),然后如果是,从table1 with latestOrder=2中选择ID
并检查条件,只要table1.lastorder>0
这有意义吗?我一直被CASE's和IIF's,CTA's困扰,但我似乎找不到工作的方法。我希望有人能告诉我,我应该朝哪个方向去
非常感谢大家的帮助!这是第三个版本:(
到目前为止,我的收获如下:
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
……基本上,您需要最后一个订购但不满足表2中任何标准的人:
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
发布您正在尝试的查询以及与您的条件相关的预期输出。谢谢编码器!我已使用查询编辑了帖子您的数据和您的查询甚至不匹配。请发布真实的数据。谢谢!CTA和SELECT是一个查询。出于某种原因,格式将它们分隔开。让我更改以完全匹配我要查找的内容。行表2中有相同的
ID
。这是正确的还是打字错误?
ID Company
10955 TEST
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